如何用欺骗手段欺骗UDP数据包中的IP地址

时间:2019-10-01 09:54:01

标签: python sockets networking udp scapy

我正在服务器上测试安全基础结构,运行一个应用程序,该应用程序在端口7777上接受UDP流量。为此,我想发送UDP数据包以查询有关该应用程序的信息,但要使用欺骗性IP来源。

这是我要发送的数据包:

https://i.stack.imgur.com/kmUPx.png

我已经尝试过用scapy进行此操作,但似乎另一端没有收到该数据包,我在那儿有tcpdump侦听端口7777上的UDP数据包。

这是我尝试过的代码:

from scapy.all import *
import random

D = 7777 # destination port
opcode = 'd'
target_ip = "1.1.1.1"
ips = target_ip.split('.'); # Target IP

payload = "SAMP{0}{1}{2}{3}{4}{5}{6}".format(chr(int(ips[0])), chr(int(ips[1])), chr(int(ips[2])), chr(int(ips[3])), chr(D & 0xFF), chr(D » 8 & 0xFF), opcode)

ip1 = 84
ip2 = random.randint(1,255)
ip3 = random.randint(1,255)
ip4 = random.randint(1,255)

A = str(ip1) + "." + str(ip2) + "." + str(ip3) + "." + str(ip4)

send(IP(src=A, dst=target_ip)/UDP(dport=D)/Raw(load=payload))

当我运行时,它说“已发送1个数据包”,但是在使用tcpdump这样的时候我看不到另一侧的数据包:

tcpdump -t -n -v -B 99999 -i gre1 -XX udp dst port 7777

我尝试使用两个不同的目标IP,它们都打开了端口7777。

  

我要发送的有效载荷基本上是53 41 4D 50 C0 A8 C8 67 61 1E   69,来自欺骗性的IP src。

1 个答案:

答案 0 :(得分:1)

仅供参考,您可以创建一个数据包模板,这将更加容易。

class YourPacket(Packet):
    fields_desc = [
        StrFixedLenField("head", "SAMP", 4),
        IPField("ip", "0.0.0.0"),
        ShortField("port", 0),
        ByteField("opcode", 0)
    ]

然后确保您在正确的接口上发送它。您可以将iface=...添加到send()

演示:

>>> x = YourPacket(ip="192.168.200.103", port=7777, opcode=ord(b"i"))
>>> x
<YourPacket  ip=192.168.200.103 port=7777 opcode=105 |>
>>> hexdump(x)
0000  53 41 4D 50 C0 A8 C8 67 1E 61 69                 SAMP...g.ai
>>> send(IP()/UDP(dport=7777)/x)