python使用原始套接字发送二层包(链路层帧)的方法


Posted in Python onJuly 22, 2019

发送端代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import struct

raw_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x1234))
raw_socket.bind(("eth0", 0))
packet = struct.pack("!6s6sH", "\xff\xff\xff\xff\xff\xff", "\xaa\xaa\xaa\xaa\xaa\xaa", 0x1234)
while True:
 print repr(packet)
 raw_socket.send(packet + "hello,world!")

1.创建套接字使用地址家族PF_PACKET,类型为SOCK_RAW,自定义类型为0x1234,这个和C语言一模一样。自定义类型我们也可以使用0X0800,这个是ETH_P_IP,相当于我们模拟ip包来发送,那么ip包头和mac包头都需要我们自己填写。现在我们使用0x1234,系统定义之外的协议类型。

2.由于是发送二层包,我们默认网卡没有配置网络,也就是ping不通的情况下,直接绑定网卡上。

3.linux内核中定义的mac包头结构

struct ethhdr
{
 unsigned char h_dest[6];
 unsigned char h_source[6];
 uint16_t h_proto; //0x1234
};

第一个是目的mac地址,第二个是本机mac地址,第三个是自定义类型必须填写,这样对方也关心这个自定义类型时,协议栈收到二层包才能正确给到对方的套接字。通过这个结构体,所以使用了pack,”!6s6sH”。我这里使用的广播地址发送。
接收端代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import struct

raw_socket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x1234))
while True :
 packet = raw_socket.recv(1024)
 data = struct.unpack("!6s6sH12s", packet)
 print repr(data[0])
 print repr(data[1])
 print repr(data[2])
 print repr(data[3])

以上这篇python使用原始套接字发送二层包(链路层帧)的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中urlparse模块介绍与使用示例
Nov 19 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
wxpython绘制音频效果
Nov 18 Python
Python实现密码薄文件读写操作
Dec 16 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
微信公众号token验证失败解决方案
Jul 22 #Python
django 消息框架 message使用详解
Jul 22 #Python
django 邮件发送模块smtp使用详解
Jul 22 #Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 #Python
Pandas透视表(pivot_table)详解
Jul 22 #Python
django认证系统 Authentication使用详解
Jul 22 #Python
django Admin文档生成器使用详解
Jul 22 #Python
You might like
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
js一组验证函数
2008/12/20 Javascript
学习ExtJS form布局
2009/10/08 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python入门教程 python入门神图一张
2018/03/05 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
python快排算法详解
2019/03/04 Python
python 实现return返回多个值
2019/11/19 Python
python3访问字典里的值实例方法
2020/11/18 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
母校寄语大全
2014/04/10 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
平面设计师岗位职责
2014/09/18 职场文书
羊脂球读书笔记
2015/06/30 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
redis数据一致性的实现示例
2022/03/18 Redis