2016-12-07 95 views
0

我想在Python中使用Scapy包來接收特定端口(如53)中的數據包(如DNS查詢),然後再次發送同樣的數據包給我自己,但不同的端口。 例如,如果原始查詢被髮送到端口53,我想再次發送它到另一個端口(例如1028)。使用Scapy(Python)重新發送網絡中的數據包

我想過將目標IP地址改爲回送地址(127.0.0.1),目標端口改爲特定值(例如1028),然後使用scapy的「發送」功能,但似乎沒有上班。

如果接收到的數據包變量名爲「數據包」,則:

packet['IP'].dst = '127.0.0.1' 
packet['UDP'].dst = 1028 
send(packet) 

我也想過刪除校驗和使用show2()重新計算過,但是這仍然無法正常工作。

任何想法?

+0

「似乎不工作?」這到底是什麼意思呢?你會得到一個異常/錯誤信息?它打印「發送1包」嗎?你能看到使用wireshark/tcpdump發送的數據包嗎?這將有助於提供一個[mcve] –

+0

它表示「發送了1個數據包」,但是當我使用show顯示數據包時,它顯示了正確的IP標頭,正確的UDP標頭和DNS部分爲### [Raw] ### 。這是否是原因? – Cole

+0

當使用tcpdump查看特定端口(1028)上的流量時,我沒有看到接收到數據包的任何指示。 – Cole

回答

0

這例如的情況下(被調用此功能時,「包」是通過嗅探接收的分組:

new_ip_header = IP(src=packet['IP'].src,dst=**MY IP**) 
new_udp_header = UDP(sport=packet['UDP'].sport,dport=1028) 
new_dns_header = packet['DNS'] 
new_packet = new_ip_header/new_udp_header/new_dns_header 
del new_packet[IP].chksum 
del new_packet[UDP].chksum 
del new_packet[IP].payload.chksum 
new_packet.show2() 
send(new_packet) 

一些注意事項:

  1. 該消息被髮送到我的公網IP地址,它表示「發送了1個數據包」,但似乎沒有像預期的那樣在1028端口接收到消息

  2. 校驗和字段正在被刪除, n我使用show2方法重新計算它們。

相關問題