2011-03-03 67 views
1

我写了一个脚本来劫持TCP连接,使用python的scapy。写一个TCP连接劫持

当测试一对虚拟机(服务器 - xp_sp3,客户端 - xp_sp1)之间的连接时,我发现客户端端口,然后服务器的SND.NEXT和使用它的客户端SND.NEXT(我已经比较所有他们与wireshark和他们是合法的)。

现在,当使用客户端的SND.NEXT向客户端发送欺骗数据包到服务器时,我发现数据包确实发送到服务器,但不发送到NetCat(它的目的地),再加上当我比较它一个真正的客户端数据包,它看起来几乎相同(不同的mac,ttl,窗口大小等)。

有什么我应该做的,使数据包看起来合法的服务器旁边我做了什么?

+0

恶搞mac地址? – Orbit 2011-03-03 14:43:52

+0

@Orbit - MAC地址应该不重要 - 它可以合法地来自LAN段上的任何路由器,这将导致不同的MAC地址。 – Flexo 2011-03-03 15:02:22

回答

1

首先,使用Wireshark验证您的欺骗数据包是否有正确的TCP校验和。如果您的欺骗数据包有无效的TCP校验和,它们将被接收器丢弃。要在Wireshark中打开这个功能:编辑>首选项>协议> TCP>验证TCP校验如果可能的话

除了序列号,也确认您正确操纵TCP时间戳值。如果序列号是正确的,但TCP时间戳选项是旧的,那么接收器仍然会丢弃数据包。

这是一个函数来增加TCP时间戳,它可能会为你做伎俩。

def inc_timestamp(packet, TSval_inc, TSecr_inc): 
    if packet.haslayer(TCP): 
     for i, option in enumerate(packet[TCP].options): # Timestamp option format: tuple(name, tuple(time1, time2))  
      if str(option[0]) == "Timestamp":   # Ex. ('Timestamp', (7797613, 414050))]    
       packet[TCP].options[i] = option[0], (option[1][0]+TSval_inc,option[1][1]+TSecr_inc) 

如果要创建从Scapy的从无到有这些数据包,您可能需要添加TCP时间戳选项字段,因为它不是由Scapy的TCP默认值()层包括在内。无论哪种方式,上面提供的代码都应该为您提供必要的格式信息。