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 logging类库使用例子
Nov 22 Python
Python全局变量操作详解
Apr 14 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
python 文件查找及内容匹配方法
Oct 25 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
python requests证书问题解决
Sep 05 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
python3 sorted 如何实现自定义排序标准
Mar 12 Python
如何在Windows中安装多个python解释器
Jun 16 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 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/04 咖啡文化
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PDO::quote讲解
2019/01/29 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
详解Python中with语句的用法
2015/04/15 Python
python 系统调用的实例详解
2017/07/11 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
python调用百度API实现人脸识别
2020/11/17 Python
Python ellipsis 的用法详解
2020/11/20 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
参观监狱心得体会
2014/01/02 职场文书
火锅店营销方案
2014/02/26 职场文书
协议书的格式
2014/04/23 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
2014年市场部工作总结
2014/11/25 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
小学生节水倡议书
2015/04/29 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技