【问题标题】:how to sniff packets, modify and then send如何嗅探数据包,修改然后发送
【发布时间】:2018-08-29 17:59:01
【问题描述】:

我想嗅探 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)

【问题讨论】:

  • 有什么建议吗?
  • send(x) 更改为sendp(x) 有帮助吗?
  • @BrianBienvenu 我使用了sendp(x),然后它在捕获第一个数据包后开始发送大量数据包!
  • 听起来更好。你有一个while 1:,所以它会不断地捕获数据包然后重新发送它们。我认为您的嗅探很可能是看到 Scapy 的 sendp() 生成的数据包 - 它实际上是在喂食自己。您需要在代码中添加一些额外的逻辑来阻止它。

标签: python scapy sniffing


【解决方案1】:

现在我可以使用以下代码欺骗 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 地址,请确保您不会陷入无限循环。

【讨论】:

  • 您还必须将每个校验和设置为None,以便在发送时正确重新计算它们
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多