簡體   English   中英

在python中生成一個欺騙性的UDP數據包

[英]generating a spoofed UDP packet in python

如何在不使用 scapy 庫的情況下使用 python 套接字創建欺騙性 UDP 數據包。 我已經創建了這樣的套接字

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(bytes('', "utf-8"), ('192.168.1.9', 7043))# 192.168.1.9dest 7043 dest port

我認為您的意思是從 IP 層(UDP 層所基於的)更改源地址和目標地址。

為此,您需要使用原始套接字。 (SOCK_RAW),這意味着您必須構建從以太網層到 UDP 層的所有內容。

老實說,沒有 scapy,這是一項艱巨的工作。 如果你想使用 scapy,它將需要 2 行:

pkt = Ether()/IP(src=“...”, dst=“...”)/UDP()/...
sendp(pkt)

我真的建議你使用 scapy。 代碼本身非常小,所以我沒有看到不使用它的理由。 這無疑是 Python 中最簡單的

這是諸如“欺騙 udp 數據包 python”之類的 google 搜索的第一個結果之一,因此我將使用 scapy 擴展 @Cukic0d 的答案。

使用 scapy CLI 工具(一些 Linux 發行版將其單獨打包到 scapy Python 庫):

pkt = IP(dst="1.1.1.1")/UDP(sport=13338, dport=13337)/"fm12abcd"
send(pkt)

這將發送一個UDP數據包的IP 1.1.1.1與源端口13338 ,目標端口13337和內容fm12abcd

如果您出於某種原因需要某個接口(例如通過不是默認路由的 VPN 發送),您可以使用send(pkt, iface='tun0')來指定它。

與@Cukic0d 的答案的一個不同之處在於,通過使用send發送第 3 層數據包而不是使用sendp send第 2 層數據包,該解決方案更加靈活。 因此,沒有必要在Ether()前面添加正確的以太網標頭,這可能會在某些情況下導致問題,例如:

WARNING: Could not get the source MAC: Unsupported address family (-2) for interface [tun0]
WARNING: Mac address to reach destination not found. Using broadcast.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM