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参数和作用域的使用
Nov 01 Python
Python的多态性实例分析
Jul 07 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
Django中的FBV和CBV用法详解
Sep 15 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Python实现图片识别加翻译功能
Dec 26 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
python使用建议与技巧分享(一)
Aug 17 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
php结合正则获取字符串中数字
2015/06/19 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
python爬取网页内容转换为PDF文件
2020/07/28 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
通过实例学习Python Excel操作
2020/01/06 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
自荐书4要点
2014/01/25 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
环保倡议书怎么写
2014/05/16 职场文书
会计学习心得体会
2014/09/09 职场文书
质量主管工作职责
2014/09/26 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
关于五一放假的通知
2015/08/18 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
Python进程间的通信之语法学习
2022/04/11 Python