最近很長一段時間內又撿起了大學時丟下的網絡協議,開始回顧網絡協議編程,於是linux系統成了首選,它讓我感到了無比的自由,可以很通透的游走於協議的各層。
最初寫了個ARP欺騙程序,很成功的欺騙了win7與虛機內的windows 2003之間的通訊,感覺linux系統在網絡接口這一塊確實很自由,后來基於ARP原理繼續寫了個ARP掃描器,感覺也還不錯。同時對於網絡編程來說,編寫一個嗅探程序也是必不可少的,它同樣式在linux下完成的,可以很好的監聽虛機構成的局域網。
在完成主機掃描后,接下來步入端口掃描領域,個人偏好SYN掃描,為了掃描主機所在的局域網,開始在win7下編寫SYN掃描器代碼,很快一個小巧的掃描器完成,接下來卻遇到一個花了不少時間還沒解決的問題。在用SYN掃描器做虛機內網測試時,發現監聽程序無論如何也沒辦法捕獲到掃描器構造的TCP包,首先開始懷疑是不是構造的TCP包不規范,導致被網卡丟棄了,調試代碼,沒有發現問題,而且sento成功的返回了發送出去的字節數,同時用winHex打開發送數據文件,對比TCP/IP協議,也未能找到值得懷疑的地方。在花了不少時間派出掃描器程序的問題,不得不懷疑是不是監聽程序存在缺陷,於是更換Wireshark,重新監聽網卡,也不能捕獲到SYN掃描器構造的TCP包。接下來花了大量的時間在不停的做出問題判斷並測試驗證,還是未能找出原因。
直到又寫了一個基於TCP連接原理的掃描器,發現它可以很好的工作,監聽程序也能很好的捕獲到TCP包,此時再次關注sento,開始懷疑raw socket及socket與操作系統有關系,前面測試得出結論,在win7下,socket可以很好的工作,而raw socket則不能。為了驗證這個問題,把SYN掃描器搬到windows 2003上運行,當看到給出掃描結果的cmd窗口時,直接傻眼了,居然真的是與操作系統有關系。
最后去msdn上查找raw socket時,找到了下面的描述(http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs.85%29.aspx):
Limitations on Raw Sockets
On Windows 7, Windows Vista, Windows XP with Service Pack 2 (SP2), and Windows XP with Service Pack 3 (SP3), the ability to send traffic over raw sockets has been restricted in several ways:
- TCP data cannot be sent over raw sockets.
- UDP datagrams with an invalid source address cannot be sent over raw sockets. The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped. This change was made to limit the ability of malicious code to create distributed denial-of-service attacks and limits the ability to send spoofed packets (TCP/IP packets with a forged source IP address).
- A call to the bind function with a raw socket for the IPPROTO_TCP protocol is not allowed.
Note The bind function with a raw socket is allowed for other protocols (IPPROTO_IP, IPPROTO_UDP, or IPPROTO_SCTP, for example).
These above restrictions do not apply to Windows Server 2008 R2, Windows Server 2008 , Windows Server 2003, or to versions of the operating system earlier than Windows XP with SP2.
總算是弄明白了,然來raw socket真的不能在win7下發送tcp數據包。不過相信,這種限制肯定也是可以突破的,只是等待去挖掘而已。
就是這么一個路人皆知的常識,確實實在在的消耗了我不少的時間和精力,只能說沒文化,真可怕!此外還有一點點懷念xp系統,至少他不會阻攔我的raw socket。
探索的過程是讓人很興奮的,在攻克一個個知識盲點之后,總能找到新的高度,立足於此,於是有了下一個征程……端口入侵……漏洞掃描……