2011-03-03 29 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默認值()層包括在內。無論哪種方式,上面提供的代碼都應該爲您提供必要的格式信息。