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函数式编程
Jun 09 Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python解惑之True和False详解
Apr 24 Python
python实现图片处理和特征提取详解
Nov 13 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
一百多行python代码实现抢票助手
Sep 25 Python
python按比例随机切分数据的实现
Jul 11 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
基于Pytorch SSD模型分析
Feb 18 Python
Numpy数组的广播机制的实现
Nov 03 Python
Python 中面向接口编程
May 20 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中error与exception的区别及应用
2014/07/28 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python正则表达式之作业计算器
2016/03/18 Python
小小聊天室Python代码实现
2016/08/17 Python
Python实现的建造者模式示例
2018/08/06 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
python动态规划算法实例详解
2020/11/22 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
施工单位安全责任书
2014/07/24 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
大学生读书笔记范文
2015/07/01 职场文书
旅行社计调工作总结
2015/08/12 职场文书
小学三年级作文之写景
2019/11/05 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers