gpt4 book ai didi

python - 发送到另一台主机后无法接收到 scapy 嗅探的 udp 数据包

转载 作者:行者123 更新时间:2023-12-03 11:50:10 28 4
gpt4 key购买 nike

我正在尝试将 scapy 嗅探到的 udp 数据包发送到另一台主机。可以通过我的默认网关访问主机地址。

在主机中,我通过tcpdump 监听目标端口10000但没有收到数据包。

我的代码是这样的:

from scapy.all import *

class Des:
def __init__(self, port):
self.port = port

def send_packets(port):
des = Des(port)
def get_pack(packet):
pkt = packet.copy()
pkt['IP'].dst= "192.168.20.111" # address of the destination host
pkt['IP'].src = "192.168.12.111" # address of my system
pkt['UDP'].dport = des.port
pkt['Ethernet'].dst = dst_mac
pkt['Ethernet'].src = src_mac
send(pkt)
return get_pack

sniff(filter = 'udp and port 50000', prn = send_packets(10000))

如果我将数据包发送到网络中的另一台主机192.168.12.112,问题仍然存在。在这种情况下,如果我用以下行替换 send 行,这些数据包将在目的地接收!

send(IP(dst='192.168.12.112')/UDP(dport=10000))

将其替换为以下行时,会导致在主机 192.168.20.111 中没有接收到数据包。

send(IP(dst='192.168.20.111')/UDP(dport=10000))

我搜索了这个问题,但没有找到结果。双方的防火墙都被禁用,scapy 的路由路径如下输出。

>>> conf.route
Network Netmask Gateway Iface Output IP
0.0.0.0 0.0.0.0 192.168.12.1 vr0 192.168.12.111
192.168.12.0 255.255.255.0 0.0.0.0 vr0 192.168.12.111

此外,我的输出界面上的tcpdump显示,当使用

send(IP(dst='ANY_DST)/UDP(dport=ANY_PORT))

数据包正在发出,但是当我发送嗅探到的数据包时,它们没有发出!

我哪里出错了?问题可能出在更改的数据包上吗?它们是包含有效负载的 RTP 数据包。

我对 python 和 scapy 很陌生。任何帮助都可以成为朝着正确方向前进的光。感谢您的宝贵时间。

我的操作系统是 FreeBSD9.2,我使用的是 python 2.7scapy (2.2.0)

最佳答案

if I replace the send line with the following line, these packets willbe received in the destination!

send(IP(dst='192.168.12.112')/UDP(dport=10000))

调试代码,查看scapy源码后,找到了上述问题的原因。当我调用 send(pkt) 时,从类 L3dnetSocket 调用以下函数。

        def send(self, x):
iff,a,gw = x.route()
# Rest of the code is ignored here

这里的对象 xclass Packet 并且它的 route 函数总是为 gateway 返回 None !因此数据包将在第 2 层发送。

    def route(self):
return (None,None,None)

当我调用 send(IP(dst='192.168.12.112')/UDP(dport=10000)) 时,对象类型 x类 IP,它的 route 函数返回正确的 gateway

    def route(self):
dst = self.dst
if isinstance(dst,Gen):
dst = iter(dst).next()
return conf.route.route(dst)

最后,我按如下方式更改了我的代码并且它可以正常工作:)

def send_packet(port):
des = Des(port)
def get_pack(packet):
udp = UDP()
udp.sport = packet[UDP].sport
udp.dport = des.port
udp.len = packet[UDP].len

ip = IP()
ip.version = packet[IP].version
ip.tos = packet[IP].tos
ip.len = packet[IP].len
ip.id = packet[IP].id
ip.flags = packet[IP].flags
ip.frag = packet[IP].frag
ip.ttl = packet[IP].ttl
ip.proto = packet[IP].proto
ip.dst = '192.168.12.112'

payload = packet[Raw].load

pkt = ip/udp/payload
pkt = pkt.__class__(bytes(pkt))

send(pkt)

return get_pack

此外,在我可达的网络中没有收到数据包的原因是我的网络:)

关于python - 发送到另一台主机后无法接收到 scapy 嗅探的 udp 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65466433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com