python 使用Raw Socket进行以太网帧注入

1. 帧注入

  对于以太网帧和Raw Socket的介绍可参考之前的一篇博文利用Raw Socket进行以太网帧嗅探。帧注入的特点:

  

  • 可以将原数据格式的包注入到网络中。
  • 在模拟网络应答方面很强大。
  • 原始套接字包结构具有不可延展性。

     随机注入

    如果你可以随机注入数据到网络上的话,你就可以向网络上发送任何数据。^_^


2. 代码实验

  进入python运行环境,需要加上root权限。(sudo python)。

  

>>>

>>> import socket

>>> import struct

>>>

>>>

>>> rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))

>>>

>>> rawSocket.bind((“eth0”,socket.htons(0x0800)))

>>> packet = struct.pack(“!6s6s2s”,’\xaa\xaa\xaa\xaa\xaa\xaa’,’\xbb\xbb\xbb\xbb\xbb\xbb’,’\x08\x00’)

>>>

>>> packet

‘\xaa\xaa\xaa\xaa\xaa\xaa\xbb\xbb\xbb\xbb\xbb\xbb\x08\x00’

>>>

>>> len(packet)

14

>>>

>>> rawSocket.send(packet + “hello, there.”)

27

>>>

 

  这里依旧使用PF_PACKET协议族,绑定到eth0网络接口上,端口号0x0800。利用struct模块的pack()函数来封装帧。以太网帧头有14字节,分别为6字节目的mac地址、6字节源mac地址和2字节协议类型。”!6s6s2s”中!表示按网络序组包。我们用len()函数求一下packet的长度,正好为14字节。然后加上我们想发送的内容将数据发送的网络中,返回的结果是发送数据的长度。

  使用tcpdump或者wireshark来查看一下我们发送的数据。我这里采用tcpdump的方式,终端下输入以下命令(我用的是Ubuntu Server,ssh连接。为了方便查看,过滤掉端口为22的数据。去除杂乱数据),然后重新发送一下数据:

  $ sudo tcpdump -i eth0 -vv -XX "not port 22 and not arp and not udp"

  从结果的第二个数据包看,我们的随机的数据已经注入到网络中。

  

时间: 2024-11-03 21:26:44

python 使用Raw Socket进行以太网帧注入的相关文章

python 利用Raw Socket进行以太网帧嗅探

1. Raw Socket基础 提供了一种方法来绕过整个网络堆栈遍历和直接将以太网帧输送到一个应用程序. 有很多种方法来创建raw sockets,例如AF_PACKET,PF_PACKET.这里使用PF_PACKET,它是linux系统上才有的选项,如果是windows或者是mac的系统的话,可以使用AF_PACKET. 1.1 PF_SOCKET 在链路层接收和发送包得应用接口. 所有接收到的包都包含完整的头部和数据部分. 所有发送的包都会由内核无更改的传递到媒介中. 支持使用Berkley

python 使用raw socket进行TCP SYN扫描

1. TCP SYN扫描 端口扫描常用于用于探测服务器或主机开放端口情况,被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务.端口扫描是向一定范围的服务器端口发送对应请求,以此确认可使用的端口.虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段. TCP SYN扫描是端口扫描众多方式中的一种,其他方式包括TCP扫描,UDP扫描,ACK扫描,窗口扫描和FIN扫描等. TCP SYN扫描是另一种TCP扫描.端口扫描工具不使

python 使用scapy进行帧注入

1. 描述 使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的.在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识.下图为以太网帧格式和scapy对应的封装包格式. 2. 示例 2.1 使用scapy构造IP数据包 进入scapy环境,输入以下代码: >>> >>> pkt = IP()/ICMP()/"hello" >>> >>> >>> pkt.sh

python raw socket 介绍

因为要使用 python 底层发包模块,也就是 raw socket 发包模式,所以在此深入了解一下 python socket 通信. 涉及到的函数: import socket socket() setsockopt() sendto() recvfrom() 因为使用的是原始套接字,所以我们不使用bind/connect函数,参照<unix 网络编程> bind 函数仅仅设置本地地址.就输出而言,调用bind函数设置的是将用于从这个原始套接字发送的所有数据报的源IP地址.如果不调用bin

无线网络安全之Python使用RAW sockets 嗅探WIFI的SSID

1. 介绍 随着无线网络的广泛普及,人们越来越频繁的使用无线网络,他改变了人们的生活方式.现在很多人走到一个地方,首先要问的第一句就是"这里有没有WIFI?"但随之出现的无线网络安全问题却没有引起人们足够的重视.在一些公众场合,例如机场,火车站,咖啡厅,餐馆等场所都会设置一些免费的无线WIFI供顾客使用,但是他们的安全性是非常不可靠的.WIFI钓鱼,伪造热点,流量劫持常常在这钟场合下被用来攻击大众场所下连接WIFI的人,从而造成可怕的信息泄露事件. 本片文章主要WIFI热点广播信号的B

以太网帧结构解析

由于需要做一个分析网卡接收的数据包的Project,需要了解以太网帧结构并解析,发现有很多内容从一般网络方面的知识是不够的,因此查阅了相关资料再此做一个记录以备忘. 以太网是目前最流行的有线的局域网技术,特别是上世纪九十年后发展的交换式局域网增加了有效数据速率,同时集线器和交换机等普通且便宜的硬件更助长了其普及程度.以太网的数据帧格式如下图所示: 数据字段:在交换式以太网中,一台主机向局域网中的另一台主机发送一个IP数据报,这个数据报封装在以太网帧结构中作为其有效载荷,以太网的最大传输单元(MT

raw socket 发送数据包

TRawSocket = class(TObject) private buf: array[0..BUFLEN - 1] of char; FdwNotifyWnd: Cardinal; hsocket: Cardinal; str: string; public constructor Create; destructor Destroy; override; function createSocket: Integer; procedure destroySocket; function

802.3和以太网帧结构-路由交换原理1-【HCNA笔记】

1.RAW 802.3帧格式 前导字段 帧起始符 DMAC SMAC Length Data FCS 7字节 1字节 6字节 6字节 2字节 46-1500字节 4字节 前导字段:每个帧以7个字节的前导字段开头,以0.1间隔代码组成,用以通知目标端作好接收准备(10101010 10101010 10101010 10101010 10101010 10101010 10101010). 帧起始符:紧跟前导字段,值为10101011,最后两位‘11’表示帧的实际开始.前导字段与起始符由物理设备自

【HCNA笔记】路由交换原理-1 802.3和以太网帧结构

1.RAW 802.3帧格式 前导字段 帧起始符 DMAC SMAC Length Data FCS 7字节 1字节 6字节 6字节 2字节 46-1500字节 4字节 前导字段:每个帧以7个字节的前导字段开头,以0.1间隔代码组成,用以通知目标端作好接收准备(10101010 10101010 10101010 10101010 10101010 10101010 10101010). 帧起始符:紧跟前导字段,值为10101011,最后两位'11'表示帧的实际开始.前导字段与起始符由物理设备自