其实就是将tcp对象作为ip对象的payload加入到ip数据报中,从上面的构造函数__init__中可以看出,还有一种增加payload的方式是直接在构造的时候传入一个Packet子类对象的裸数据,然后构造函数会调用dissect函数"发现"这些裸数据是哪个Packet子类的对象,然后构造之,最终add_payload。
Filters演示一下bpf过滤器和sprintf()方法:>>> a=sniff(filter="tcp and ( port 25 or port 110 )", prn=lambda x: x.sprintf("%IP.src%:%TCP.sport% -> %IP.dst%:%TCP.dport% %2s,TCP.flags% : %TCP.payload%"))192.168.8.10:47226 -> 213.228.0.14:110 S :213.228.0.14...
1.构造ARP请求并发送 >>> arp = ARP() //这里把ARP()类实例化成arp >>> dir(arp) //查看arp的方法有哪些 [ '_name', '_overload_fields', '_pkt', '_show_or_dump', 'add_payload', 'add_underlayer', 'aliastypes', 'answers', 'build', 'build_done', 'build_padding', ... ... ...
>>> dir(arp) //查看arp的方法有哪些 [ '_name', '_overload_fields', '_pkt', '_show_or_dump', 'add_payload', 'add_underlayer', 'aliastypes', 'answers', 'build', 'build_done', 'build_padding', ... ... 'underlayer', 'upper_bonds', 'who_has'] >>> arp.show() //查看ar...
print(f"[*] {str(packet[TCP].payload)}") def main(): # 监听邮件协议常用端口 # 参数store,把它设为0以后,Scapy就不会将任何数据包保留在内存里 sniff(filter='tcp port 110 or tcp port 25 or tcp port 143', prn=packet_callback, store=0) ...
pkt.decode_payload_as() 改变payload的decode方式 pkt.psdump() 绘制一个解释说明的PostScript图表 pkt.pdfdump() 绘制一个解释说明的PDF pkt.command() 返回可以生成数据包的Scapy命令 3、一组数据包 传入的是数据段,就会生成一组数据包 >>> a=IP(dst="www.slashdot.org/30") # 该网段中的子网的ip,4...
pkt.sprintf() 用数据包字段填充格式字符串 pkt.decode_payload_as() 改变payload的decode方式 pkt.psdump() 绘制一个解释说明的PostScript图表 pkt.pdfdump() 绘制一个解释说明的PDF pkt.command() 返回可以生成数据包的Scapy命令 >>> sendp(Ether()/IP(dst="137.195.117.153", ttl=(1,10)), iface="eth...
self.__iter__().next()得到了Ether对象,调用它的build即可先构建以太头,再构建payload: def do_build(self): p="" for f in self.fields_desc: p = f.addfield(self, p, self.__getattr__(f)) pkt = p+str(self.payload) return pkt ...
p = f.addfield(self, p, self.__getattr__(f)) pkt = p+str(self.payload) return pkt 在do_build中,str(self.payload)又会开启一次针对payload的__str__()(间接的对payload的__iter__的调用)的调用,从而开始了构建IP对象的过程,依次类推。这样就需要将__iter__实现的非常好: ...
self.__iter__().next()得到了Ether对象,调用它的build即可先构建以太头,再构建payload: def do_build(self): p="" for f in self.fields_desc: p = f.addfield(self, p, self.__getattr__(f)) pkt = p+str(self.payload) return pkt ...