• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            笑看風(fēng)云淡

            寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
            posts - 96, comments - 48, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理
            在從 ipv4 到 ipv6 的升級過程中,有不少函數(shù)發(fā)生了變化。新版的 winpcap 正在慢慢地從 ipv4 向 ipv6 遷移。在這個過程中,有不少函數(shù)已經(jīng)被廢棄。舊的例程在新版的 winpcap 下無法使用,這其中也包括了一些著名的基于 winpcap/libpcap 的軟件。比如 windump 和 snort for windows。作者在編程過程中收集了相關(guān)的資料,提出了解決方法。本文的最新版本和討論保存在廣州大學(xué)信息安全研究所 http://www.gzisi.com 網(wǎng)站的入侵檢測文章部分。

             

            很多程序員下載了 winpcap 3.1 或更新的版本后,會發(fā)現(xiàn)原來自己運行得好好的程序突然不能使用了。而且其中涉及到一些相當(dāng)重要的函數(shù),比如 pcap_loop。 winpcap 對這些函數(shù)的修改使得很多基于它的應(yīng)用程序(比如windump和snort)都將作出不小的改動。當(dāng)然,還有你自己編寫的代碼……

            以下是 windows 本身的 winsock 編程對此問題的影響。由于新版的 winpcap 完全使用了新的 winsock(支持ipv6),因此下列問題可能影響到每一個程序。

            這是新舊兩版的 packet32.h 之間的差異

            //packet32.h
            typedef struct npf_if_addr {
            struct sockaddr ipaddress; ///< ip address.
            struct sockaddr subnetmask; ///< netmask for that address.
            struct sockaddr broadcast; ///< broadcast address.
            //struct sockaddr_storage ipaddress; ///< ip address.
            //struct sockaddr_storage subnetmask; ///< netmask for that address.
            //struct sockaddr_storage broadcast; ///< broadcast address.
            }npf_if_addr;

             

            http://msdn.microsoft.com/library/default.html?url=/library/en-us/winsock/winsock/sockaddr_storage_2.html

            很多程序員仍然使用 visual c++6 編譯程序,不幸的是,vc++6中的 winsock2.h 太老了,它根本不認(rèn)得 struct sockaddr_storage。因此,winpcap 自帶的例程在 vc++6 下編譯時會無情地拋出無數(shù)錯誤。事實上,該結(jié)構(gòu)完全可以使用老的 sockaddr 代替。手工改動 packet32.h,將 sockaddr_storage 換成 sockaddr,編譯將順利通過。當(dāng)然,這樣的代碼自然無法支持 ipv6 了。到目前為止,我沒有找到在 vc++6 與windows 2003中成功編譯 ipv6 的例程。windows 2000 的用戶可以升級sdk,使自己的vc++6支持ipv6編程,但不幸的是這個sdk升級版檢查操作系統(tǒng)的版本,不是2195就停止了安裝,使我在 windows xp 和 win 2003 下無法安裝。在作者寫本文時,沒有找到對 win xp 和 win 2003 的 ipv6 sdk。我沒有安裝那個巨達(dá) 106m 的 windows 2003 開發(fā)升級包,但估計那個包中可能有支持 ipv6 開發(fā)所需的庫和頭文件。我也不排除對 for 2000 的sdk包做做手腳,提取其中的文件后能夠成功運行的可能。因為 microsoft visual studio.net 2002/2003 已經(jīng)對此提供了很好的支持。

            躲過了 sockaddr_storage 一劫的朋友可能很快會遇到 socklen_t 和 getnameinfo 函數(shù)的錯誤。這兩個函數(shù)包含在頭文件 ws2tcpip.h 中。很不幸,它也是一個 for ipv6 的函數(shù),在vc++6中同樣沒有支持。編譯時發(fā)生的錯誤如下:

            --------------------configuration: iflist - win32 debug--------------------
            compiling...
            iflist.c
            g:\security\ids\wpdpack\examples\iflist\iflist.c(151) : error c2065: socklen_t : undeclared identifier
            g:\security\ids\wpdpack\examples\iflist\iflist.c(151) : error c2146: syntax error : missing ; before identifier sockaddrlen
            g:\security\ids\wpdpack\examples\iflist\iflist.c(151) : error c2065: sockaddrlen : undeclared identifier
            g:\security\ids\wpdpack\examples\iflist\iflist.c(160) : warning c4013: getnameinfo undefined; assuming extern returning int
            g:\security\ids\wpdpack\examples\iflist\iflist.c(166) : error c2065: ni_numerichost : undeclared identifier
            error executing cl.exe.

             

            iflist.exe - 4 error(s), 1 warning(s)

            關(guān)于該函數(shù),可以參考微軟msdn:

            http://msdn.microsoft.com/library/default.html?url=/library/en-us/winsock/winsock/getnameinfo_2.html

            同樣,如果你不介意讓程序僅能在 ipv4 上工作的話,可以用原來的函數(shù) gethostbyname 代替。

            原文地址:http://blog.chinaunix.net/u2/64540/showart_573227.html


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久综合丁香激情久久| 99久久精品费精品国产| 久久本道综合久久伊人| 国产91色综合久久免费分享| 久久亚洲精品人成综合网| 亚洲国产日韩欧美综合久久| 性做久久久久久久久| 精品无码久久久久久久动漫| 久久www免费人成看片| 精品国产乱码久久久久软件| 青草久久久国产线免观| 伊人 久久 精品| 久久不射电影网| 久久久亚洲裙底偷窥综合| 久久精品人人做人人爽电影蜜月| 久久精品国产精品亚洲| 伊人久久大香线蕉av一区| 久久男人AV资源网站| 久久综合给久久狠狠97色| 久久综合狠狠综合久久97色| 国产婷婷成人久久Av免费高清 | 久久久无码精品午夜| 成人午夜精品无码区久久| 99久久婷婷国产综合精品草原| 国产亚洲精久久久久久无码77777| 青青青青久久精品国产| 亚洲午夜久久久久久噜噜噜| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久精品国内一区二区三区| 亚洲国产视频久久| 伊人久久大香线蕉精品| 无码人妻久久一区二区三区| 亚洲人成无码久久电影网站| 国产福利电影一区二区三区久久老子无码午夜伦不 | 欧美性大战久久久久久| 热99re久久国超精品首页| 久久久噜噜噜www成人网| 午夜精品久久久久久影视riav| 色成年激情久久综合| 久久青青草原国产精品免费| www久久久天天com|