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 数据的清理行为实例详解
Jul 12 Python
Sanic框架Cookies操作示例
Jul 17 Python
Django实现学生管理系统
Feb 26 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
Django配置文件代码说明
Dec 04 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
Python xlwt模块使用代码实例
Jun 10 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
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python清除字符串里非数字字符的方法
2015/07/02 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
装修设计师求职信
2014/02/26 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014会计年终工作总结
2014/12/20 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
演讲开场白和结束语
2015/05/29 职场文书
初中团委工作总结
2015/08/13 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android