raw socket趕上windows

      最近很長一段時間內又撿起了大學時丟下的網絡協議,開始回顧網絡協議編程,因而linux系統成了首選,它讓我感到了無比的自由,能夠很通透的遊走於協議的各層。linux

      最初寫了個ARP欺騙程序,很成功的欺騙了win7與虛機內的windows 2003之間的通信,感受linux系統在網絡接口這一塊確實很自由,後來基於ARP原理繼續寫了個ARP掃描器,感受也還不錯。同時對於網絡編程來講,編寫一個嗅探程序也是必不可少的,它一樣式在linux下完成的,能夠很好的監聽虛機構成的局域網。編程

      在完成主機掃描後,接下來步入端口掃描領域,我的偏好SYN掃描,爲了掃描主機所在的局域網,開始在win7下編寫SYN掃描器代碼,很快一個小巧的掃描器完成,接下來卻遇到一個花了很多時間還沒解決的問題。在用SYN掃描器作虛機內網測試時,發現監聽程序不管如何也沒辦法捕獲到掃描器構造的TCP包,首先開始懷疑是否是構造的TCP包不規範,致使被網卡丟棄了,調試代碼,沒有發現問題,並且sento成功的返回了發送出去的字節數,同時用winHex打開發送數據文件,對比TCP/IP協議,也未能找到值得懷疑的地方。在花了很多時間派出掃描器程序的問題,不得不懷疑是否是監聽程序存在缺陷,因而更換Wireshark,從新監聽網卡,也不能捕獲到SYN掃描器構造的TCP包。接下來花了大量的時間在不停的作出問題判斷並測試驗證,仍是未能找出緣由。windows

      直到又寫了一個基於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):app

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:socket

 

  • 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).tcp

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。調試

       探索的過程是讓人很興奮的,在攻克一個個知識盲點以後,總能找到新的高度,立足於此,因而有了下一個征程……端口入侵……漏洞掃描……

相關文章
相關標籤/搜索