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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
Python 操作MySQL详解及实例
Apr 30 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
Python assert语句的简单使用示例
Jul 28 Python
python基础教程之while循环
Aug 14 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
python怎么判断素数
Jul 01 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python re的findall和finditer的区别详解
Nov 15 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
调频问题解答
2021/03/01 无线电
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
js检测用户输入密码强度
2015/10/22 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
python PIL模块的基本使用
2020/09/29 Python
python RSA加密的示例
2020/12/09 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
城管年度个人总结
2015/02/28 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
python 爬取天气网卫星图片
2021/06/07 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers