2009-12-14 64 views
1

我正在處理一個非常老的應用程序。我需要在此應用程序中進行更改以偵聽即將到來的icmp請求並決定回覆或丟棄數據包(ICMP上的一種訪問控制)。該應用程序是基於Winsock版本1.1。我嘗試了不同的方式來創建套接字並使用套接字捕獲icmp數據包。但是我的努力都沒有奏效。如何使用winsock版本1.1實現icmp數據包處理程序?

誰能幫助我嗎?還是完全不可能?

非常感謝您的回答。

回答

0

我不認爲你將能夠在應用程序(Winsock)級別攔截ICMP數據包,因爲這不是應用程序功能。您可能需要爲運行應用程序的任何版本的Windows編寫網絡過濾器驅動程序。

0

你說應用程序是舊的,但沒有關於你運行它的操作系統。除非你在16位Windows或NT 3.x上運行它,否則沒有理由不能遷移到Winsock 2.你可以使用Winsock 2 for Win95,它也包含在所有後來的Win9x操作系統中如在Windows NT 4以上。

如果你真的必須在Win16上運行這個應用程序,可能會從那個提供原始套接字支持的時代挖掘出一個第三方Winsock堆棧,但這聽起來像是一個巨大的麻煩,如果你想合法地做到這一點。更容易將Win98指定爲最低操作系統版本,然後繼續。

編輯:我假設你可以做你想做的與raw sockets,這就需要移動到的Winsock 2,如果你必須使用內置的Winsock在MS操作系統。將程序更改爲使用Winsock 2而不是Winsock 1.1很容易;一個庫更改,一個頭文件更改,以及WSAStartup調用的更改,並且您在那裏。原始的ICMP套接字允許您構建任何您想要的ICMP數據包,而在較新的操作系統中,您也可以偵聽ICMP數據包。如果事實證明堆棧不允許您通過套接字偵聽您需要的數據包,則可以使用packet capturing技術來完成。