赞
踩
小明和小红相互写信沟通,一封信就是一个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)
/
符号被重载为“叠加”,上面我们把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地址。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。