我正在開發一個網站測試框架,我希望能夠欺騙用戶ip。我讀過,像Loadrunner這樣的軟件可以做到這一點,我希望能夠做到這一點。如何使用套接字來欺騙IP地址?
關於如何使用套接字的教程通常可以找到here,但我如果我想欺騙IP,我必須以某種方式編輯IP標頭。這是在套接字層面上完成的,還是在.Net中有更深的一層,這會讓我這麼做?
我正在開發一個網站測試框架,我希望能夠欺騙用戶ip。我讀過,像Loadrunner這樣的軟件可以做到這一點,我希望能夠做到這一點。如何使用套接字來欺騙IP地址?
關於如何使用套接字的教程通常可以找到here,但我如果我想欺騙IP,我必須以某種方式編輯IP標頭。這是在套接字層面上完成的,還是在.Net中有更深的一層,這會讓我這麼做?
你不能了,因爲訪問原始套接字已在Windows的桌面版本被限制:
在Windows 7中,Windows Vista中,Windows XP的Service Pack 2(SP2)和Windows帶有Service Pack 3(SP3)的XP,通過原始套接字發送流量的能力受到幾種限制:
- TCP數據無法通過原始套接字發送。
- 具有無效源地址的UDP數據報不能通過原始套接字發送。任何傳出UDP數據報的IP源地址必須存在於網絡接口上,否則數據報將被丟棄。此更改旨在限制惡意代碼創建分佈式拒絕服務攻擊的能力,並限制發送欺騙數據包(帶有僞造源IP地址的TCP/IP數據包)的能力。
- 不允許使用
IPPROTO_TCP
協議的原始套接字調用bind
函數。
注意其他協議(例如IPPROTO_IP
,IPPROTO_UDP
或IPPROTO_SCTP
)允許使用原始套接字的bind
函數。
(從Dev Center - Desktop - TCP/IP Raw Sockets)
你可以很容易地創建一個原始套接字:
Socket s = new Socket(ip.AddressFamily, SocketType.Raw, ProtocolType.Ip);
此時的你來構建相應的數據報(這將是一個單獨的問題如果您沒有關於如何執行此操作的文檔)
LoadRunner只能在實際IP地址的情況下欺騙IP地址s存在於Load Generator上。因此,如果我有200個IP地址分配給我的主機,那麼我可以在這些IP地址之間分配我的負載,而不是使用最低成本路由,或主操作系統和輔助網絡接口在操作系統中發揮作用。這不僅適用於LoadRunner,而且其他應用程序性能測試工具也是如此,因此需要將地址分配給生成負載的主機。
如果您正在尋找IP地址不需要分配給主機進行測試的原始欺騙解決方案,那麼您可以考慮來自思博倫和Ixia等公司的網絡性能測試工具,尤其是基於機箱的解決方案。如果需要,這些網絡解決方案還可以生成數以萬計的僞造IP地址。
這是否意味着在服務器版本的Windows上啓用對原始套接字的訪問? –
是的,只有服務器版本將允許您僞造數據包的來源(因爲服務器可能必須爲了路由目的而這樣做) – PhonicUK
您能否提供一個適用於Windows 2008服務器的示例? –