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中的线程同步方法
Jun 14 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python GUI布局尺寸适配方法
Oct 11 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
在python中求分布函数相关的包实例
Apr 15 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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模板判断输出Empty标签用法详解
2014/06/30 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Python每天必学之bytes字节
2016/01/28 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python如何使用函数做字典的值
2019/11/30 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python爬取招聘要求等信息实例
2020/11/20 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
七年级数学教学反思
2014/01/22 职场文书
12月红领巾广播稿
2014/02/13 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript