【发布时间】:2014-10-22 13:36:28
【问题描述】:
我想在我的 ubuntu 中创建一个 TCP-3 方式的握手。 我在虚拟机中使用了kali linux。在kali linux(IP-172.16.28.130)的终端中,我以“LISTEN”模式打开了一个端口以与该机器建立连接。
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
当我将目标更改为 dst = "www.google.com" 并将目标端口更改为 dport=80 时,它工作正常。
但是现在, 1) 我可以发送 SYN 数据包 2) 目的地以SYN、ACK包响应 3) 我的系统发送 RST 4)我发送了ACK 5) 目标系统回复 RST 所以我无法建立连接!! 问题: 1) 我怎样才能成功建立连接 2) 我的源 ip = "1.2.3.4", * 但是当我发送到虚拟机时,它显示 172.16.28.1(Broadcast ip)。为什么?
【问题讨论】:
标签: python ubuntu networking tcp scapy