我想在我的ubuntu中創建TCP-3方式握手。 我在虛擬機中使用了kali linux。在kali linux(IP-172.16.28.130)的終端中,我在「LISTEN」模式下打開了一個端口以與該機器建立連接。爲什麼系統在嘗試時發送RST標誌 - TCP在python中3路握手
nc -l -p 1025
跑在Ubuntu主機我的Python代碼,
#!/usr/bin/python
from scapy.all import *
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
#if i send to broadcast address : 192.168.1.255 what will happen?
def sendPacket(src, dst):
ip = IP(dst = dst)
port = RandNum(1024, 65535)
SYN = ip/TCP(sport=port, dport=1025, flags="S", seq = 42)
SYNACK = sr1(SYN, verbose=0)
ACK = ip/TCP(sport = SYNACK.dport, dport=80, flags="A", seq = SYNACK.ack, ack = SYNACK.seq + 1)
send(ACK)
print "Done!!\n"
src = '1.2.3.4'
dst = '172.16.28.130'
sendPacket(src, dst)
數據包捕獲使用Wireshark的,
3 172.16.28.1 172.16.28.130 TCP 54 64865 > blackjack [SYN] Seq=0 Win=8192 Len=0
4 172.16.28.130 172.16.28.1 TCP 60 blackjack > 64865 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460
7 172.16.28.1 172.16.28.130 TCP 54 64865 > blackjack [RST] Seq=1 Win=0 Len=0
8 172.16.28.1 172.16.28.130 TCP 54 64865 > http [ACK] Seq=1 Ack=1 Win=8192 Len=0
9 172.16.28.130 172.16.28.1 TCP 60 http > 64865 [RST] Seq=1 Win=0 Len=0
之前跑的代碼,我改變IPTABLE,
iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 192.168.1.20 -j DROP
當我改變t他的目的地是,dst =「www.google.com」和目的地港口,dport = 80它工作的很好。
但現在, 1)我可以發送SYN包 2)目的地與SYN響應,ACK包 3)我的系統發送RST 4)1發送的ACK 5)目標系統應答與RST 所以我無法建立連接! 問題: 1)我怎樣才能成功完全建立連接 2)我的源IP =「1.2.3.4」, *但是當我發送到虛擬機時,它顯示172.16.28.1(廣播IP)。爲什麼?
解決了src問題。謝謝..但我無法建立連接。我改變iptables的所有方式,如「iptables -A OUTPUT -p tcp -tcp-flags RST RST -s 192.168.1.7 -j DROP」,iptables -A OUTPUT -p tcp -tcp-flags RST RST -s 172.16 .28.1 -j DROP,「iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 172.16.28.130 -j DROP」.....但沒有區別。我的系統發送RST。我需要改變卡利的任何東西嗎? – 2014-08-29 11:57:05