你好,我正在使用nfqueue和scapy,我的目標是在我的NFQUEUE接收數據包,更改有效負載並重新發送它們。用nfqueue/scapy更改TCP負載
我可以改變字段像TTL沒有任何問題,但是當涉及到更改有效載荷時,我正在解決問題。
當我更改有效載荷時,我用wireshark嗅探數據包,顯然我發送的數據包修改了有效負載,但服務器不回答。
這是我的代碼:
#!/usr/bin/env python
import nfqueue
from scapy.all import *
def callback(payload):
data = payload.get_data()
pkt = IP(data)
pkt[TCP].payload = str(pkt[TCP].payload).replace("ABC","GET")
pkt[IP].ttl = 40
print 'Data: '+ str(pkt[TCP].payload)
print 'TTL: ' + str(pkt[IP].ttl)
del pkt[IP].chksum
payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
def main():
q = nfqueue.queue()
q.open()
q.bind(socket.AF_INET)
q.set_callback(callback)
q.create_queue(0)
try:
q.try_run() # Main loop
except KeyboardInterrupt:
q.unbind(socket.AF_INET)
q.close()
main()
我已經將這個規則傳出通信到端口80:iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE
而且,爲了測試它,比如我打開遠程登錄到谷歌的80端口,做一個GET/HTTP/1.1
,這是我所看到的:
TTL: 40
DATA: GET/HTTP/1.1
現在,如果我做ABC/HTTP/1.1
我收到沒有答案!我的telnet卡住了。
我也嘗試過HTTP網站瀏覽器瀏覽東西,檢查wireshark如何我的TTL真的變爲40,然後,瀏覽字符串「ABC」,我的瀏覽器再次卡住。 我嗅探請求改爲GET,但我沒有收到答案。
謝謝有點讓我頭痛,如果有更多經驗的人可以讓我走向正確的路,我會非常感激。先謝謝你。
我想你應該觸發TCP校驗和字段的重新計算,以類似於IP校驗和字段的方式。 – Yoel 2014-12-04 15:05:57