Python 如何嗅探数据包,修改然后发送

Python 如何嗅探数据包,修改然后发送,python,scapy,sniffing,Python,Scapy,Sniffing,我想嗅探IP数据包,然后将ToS字段更改为1,并向IP报头添加选项,然后发送修改后的数据包而不是原始数据包。 我发现它可以用scapy来做这件事,但它似乎不起作用。 有人能帮我吗 from scapy.all import * from scapy.layers.inet import IP def chgSend(x): x[IP].tos = 1 send(x) while 1: sniff(filter="ip src host 10.0.0.2", prn=ch

我想嗅探IP数据包,然后将ToS字段更改为
1
,并向IP报头添加选项,然后发送修改后的数据包而不是原始数据包。 我发现它可以用scapy来做这件事,但它似乎不起作用。 有人能帮我吗

from scapy.all import *
from scapy.layers.inet import IP

def chgSend(x):
    x[IP].tos = 1
    send(x)
while 1:
    sniff(filter="ip src host 10.0.0.2", prn=chgSend)

现在我可以用以下代码伪造IP地址并更改ToS字段:

from scapy.all import *
from scapy.layers.inet import IP


def change_send(pckt):
    actual_src = pckt[IP].src
    pckt[IP].src = "192.168.1.5"
    pckt[IP].tos = 1
    sendp(pckt)
    print("We changed source from " + actual_src + " to " + pckt[IP].src)


while 1:
    sniff(filter="ip src host 192.168.1.2", prn=change_send)

如果您不想更改源IP地址,请确保您不会陷入无限循环。

有什么建议吗?更改
send(x)
sendp(x)
是否有帮助?@brianbienvenunu我使用了
sendp(x)
在捕获第一个数据包后,它开始发送大量数据包!听起来好多了。您有一个
while 1:
,因此它将持续捕获数据包,然后重新发送它们。我认为您的嗅探可能看到了由Scapy的
sendp()
生成的数据包,它正在有效地自我反馈。您需要在代码中添加一些额外的逻辑来停止此操作。您还必须将每个校验和设置为
None
,以便在发送时正确地重新计算它们