您可以使用scapy FIN或RST包輕鬆地在網橋(通常是br0)中嗅探並製作合適的RST或FIN數據包。
這裏舉一個例子,其中RST在與數據的分組相同的方向上發送。嗅的
#!/usr/bin/python
from scapy.all import *
import random
def sendRST(p):
flags = p.sprintf("%TCP.flags%")
if flags != "S":
ip = p[IP] # Received IP Packet
tcp = p[TCP] # Received TCP Segment
if ip.len <= 40:
return
i = IP() # Outgoing IP Packet
i.dst = ip.dst
i.src = ip.src
t = TCP() # Outgoing TCP Segment
t.flags = "R"
t.dport = tcp.dport
t.sport = tcp.sport
t.seq = tcp.seq
new_ack = tcp.seq + 1
print "RST sent to ",i.dst,":",t.dport
send(i/t)
while (1):
PKT = sniff (iface = "br0", filter = "tcp and src host x.x.x.x", count=1, prn=sendRST)
exit()
檢查選項,至極極其強大:)
希望能幫助你。
太棒了!這看起來就像我所需要的,因爲我認爲我無法做到這一點和其他的東西。我希望我能多次提出這個答案。非常感謝。一個問題:sniff()是一個Python API還是一個Scapy API?上面的代碼也會替換髮送的數據包還是僅僅由它觸發? – AlastairG
一些答案:sniff是一個scapy API [http://www.secdev.org/projects/scapy/doc/usage.html#sniffing]。數據包沒有被替換,只是一個新的包RST被注入了libnet。如果你想更換數據包,你應該使用另一種技術,比如libnetfilter_queue。感謝您的問候;) –