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 学习笔记
Dec 27 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
python分析网页上所有超链接的方法
May 08 Python
Python随机生成带特殊字符的密码
Mar 02 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
python生成器用法实例详解
Nov 22 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
windows安装python超详细图文教程
May 21 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定时任务延缓执行的实现
2014/10/08 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
Smarty模板配置实例简析
2019/07/20 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python控制Firefox方法总结
2019/06/03 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python之yield和Generator深入解析
2019/09/18 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
《骆驼和羊》教学反思
2014/02/27 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
Golang 对es的操作实例
2022/04/20 Golang