当前位置:   article > 正文

Python黑帽子编程—使用scapy构造数据包_scapy 构造payload

scapy 构造payload

scapy构造数据包

小明和小红相互写信沟通,一封信就是一个IP包裹。但是我们这次想要搞点恶作剧,比如代小明给小红发消息,下面的payload里装的就是我们的消息。

from scapy.all import *
ming_ip = "10.60.17.46" #  我们要代替小明发信息
hong_ip = "192.168.209.153" #  收信人小红
ming_port = 9999 # source port (sport)
hong_port = 80 # destination port (dport)
payload = "Xiao Hong, he he!" # packet payload 包的载荷,我们的嘿嘿嘿
spoofed_packet = IP(src=ming_ip, dst=hong_ip) / TCP(sport=ming_port, dport=hong_port) / payload

print(spoofed_packet)

send(spoofed_packet)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

/符号被重载为“叠加”,上面我们把IP()/TCP()/payload很自然的表示这个ip包里边儿是个tcp,tcp里边装了我们的payload内容。而这个spoofed_packet就像汉堡一样,是一层一层累好了的IP包,非常方便。举一反三,send(IP(dst="192.168.1.1")/ICMP())这条程序其实就可以理解为在命令行中ping 192.168.1.1只不过只是发送icmp,而木有接收部分罢了。

ARP(op=1, hwdst="ff:ff:ff:ff:ff:ff", pdst=ip_address)
#arp类的构造函数列表:
>>> ls(ARP)
hwtype     : XShortField          = (1)
ptype      : XShortEnumField      = (2048)
hwlen      : ByteField            = (6) 
plen       : ByteField            = (4)
op         : ShortEnumField       = (1) 取值为1或者2,代表ARP请求或者响应包。
hwsrc      : ARPSourceMACField    = (None) 发送方Mac地址。
psrc       : SourceIPField        = (None) 发送方IP地址。
hwdst      : MACField             = ('00:00:00:00:00:00') 目标Mac地址。
pdst       : IPField              = ('0.0.0.0') 目标IP地址。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
ether_pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(op=1, pdst=ip_address)

>>> ls(Ether)
dst        : DestMACField         = (None) 目的MAC
src        : SourceMACField       = (None) 源MAC
type       : XShortEnumField      = (36864)
这个op选项很重要,1为ARP请求,2为ARP应答
构造一个以太网数据包通常需要指定目标和源MAC地址,如果不指定,默认发出的就是广播包ff:ff:ff:ff:ff:ff
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/156929
推荐阅读
相关标签
  

闽ICP备14008679号