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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
python返回昨天日期的方法
May 13 Python
Python中每次处理一个字符的5种方法
May 21 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python清空文件并替换内容的实例
Oct 22 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
python实现汽车管理系统
Nov 30 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
python异步Web框架sanic的实现
Apr 27 Python
pycharm激活方法到2099年(激活流程)
Sep 22 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
用cookies来跟踪识别用户
2006/10/09 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
生成二维码方法汇总
2014/12/26 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
React降级配置及Ant Design配置详解
2018/12/27 Javascript
js实现聊天对话框
2020/02/08 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
Python yield的用法实例分析
2020/03/06 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
python如何使用腾讯云发送短信
2020/09/17 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
如何强制垃圾回收
2015/10/06 面试题
公司市场部岗位职责
2013/12/02 职场文书
高中语文课后反思
2014/04/27 职场文书
党员承诺书怎么写
2014/05/20 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
MySQL限制查询和数据排序介绍
2022/03/25 MySQL