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 strip()函数 介绍
May 24 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
详解Python装饰器
Mar 25 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
Python绘制数码晶体管日期
Feb 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
浅谈五大Python Web框架
2017/03/20 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python浪漫表白源码
2019/04/05 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
资产评估专业学生的自我鉴定
2013/11/14 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
护士自我鉴定总结
2014/03/24 职场文书
市场营销毕业求职信
2014/08/07 职场文书
关于美容院的活动方案
2014/08/14 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫