使用Scapy(Python)重新发送网络中的数据包

时间:2016-12-07 16:40:12

标签: python sockets networking tcp

我想在Python中使用Scapy包,以便在特定端口(例如53)中接收数据包(如DNS查询),然后再将相同的数据包发送给我自己,但发送到不同的端口。 例如,如果原始查询被发送到端口53,我想再次发送它但是到另一个端口(例如1028)。

我考虑过将目标IP地址更改为环回地址(127.0.0.1),将目标端口更改为特定值(例如1028),然后使用scapy的“发送”功能,但似乎没有工作。

如果收到的数据包变量名为“packet”,则:

packet['IP'].dst = '127.0.0.1'
packet['UDP'].dst = 1028 
send(packet)

我还想过删除校验和并使用show2()重新计算它们但它仍然不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是一个例子(当"#"是通过嗅探接收的数据包时调用此函数:

new_ip_header = IP(src=packet['IP'].src,dst=**MY IP**)
new_udp_header = UDP(sport=packet['UDP'].sport,dport=1028)
new_dns_header = packet['DNS']
new_packet = new_ip_header / new_udp_header / new_dns_header
del new_packet[IP].chksum
del new_packet[UDP].chksum
del new_packet[IP].payload.chksum
new_packet.show2()
send(new_packet)

一些注意事项:

  1. 邮件正在发送到我的公共IP地址。它说"发送了1个包"但似乎未按预期在端口1028中收到消息。

  2. 正在删除校验和字段,然后我使用show2方法重新计算它们。