我正在用C編寫端口掃描器,並且想要檢測在開放端口及其版本上運行的是什麼服務。
我已經寫了掃描器代碼,但現在我不知道如何檢測正在運行的服務。
我能做什麼?C檢查在開放端口上運行的是什麼服務
回答
如果您決定在自己的代碼中執行此操作,則可以連接到端口,查看是否有任何數據,如果沒有,則發送幾個字節,然後再次檢查。
然後將其與預期響應進行匹配。
想要知道你在找什麼,你可以用telnet手動連接到端口,並戳它。在許多情況下(Web服務器就是一個簡單的例子),您必須發送一些格式正確的數據才能獲得可用的響應。
NMAP做這一切以及更多(例如廣泛的檢查,如尋找字節順序和ARP通信量的時間)
UPDATE:幾個人都提到衆所周知的端口,但不會幫助你發現標準服務運行在非標準端口上,例如運行在自定義端口上的ssh或http服務器。
我同意這裏的所有內容,但會重複我在上述評論中所說的內容:即使您爲每個人所知的協議編寫「最小客戶端」,也無法以100%的準確率實現此目標。 – 2013-03-08 21:30:57
@NikBougalis絕對如此。檢測和發送數據以獲取響應的方式幾乎是無止境的。我不會承擔這樣的項目,除了a)爲了好玩,或者b)爲nmap不知道的內部定製服務 – 2013-03-08 21:49:12
如果服務器先發送一些東西,用它來標識協議。
如果沒有,請根據某些協議(例如http)發送內容,然後查看回送的服務器(有效響應或錯誤)。您可能需要使用不同的協議進行多次嘗試,並且良好的順序對於減少連接數量非常重要。
某些協議可能很難識別,並且很容易使用您不知道的獨特協議定製服務器,甚至隱藏真正的服務器,如http等簡單的假冒服務器。
如果你只是想知道端口通常是什麼,請檢查"well known ports"和官方reserved ports。
另請參閱nmap源代碼。
- 1. 檢查C/C++中的開放端口
- 2. 如何檢查服務器或主機上的開放端口?
- 3. 檢查C++中的開放UDP端口
- 4. 我應該在什麼端口上運行Socket.IO服務器?
- 5. 檢查客戶端端口是開放的,並轉發[C#,ASP.NET]
- 6. 如何查找goDaddy專用服務器上的開放端口?
- 7. 如何使ASP.NET開發服務器在端口80上運行?
- 8. 什麼是Gmail MX服務器端口?
- 9. 檢查服務是否正在運行?
- 10. 檢查服務是否正在運行
- 11. 端口號正在運行的服務
- 12. 爲什麼不通過Web.py讓我在端口80上運行服務器?
- 13. Linux服務器上的Tomcat未在端口80上運行
- 14. 爲什麼要啓動開放端口和什麼是監聽?
- 15. 運行嵌入式服務器時OrientDb端口範圍的目的是什麼?
- 16. 檢查是否在Linux服務器上運行的jar文件
- 17. 爲什麼檢查服務是否正在運行,是否給出錯誤
- 18. 如何在Linux上檢查服務是否正在運行Mint
- 19. C程序 - 如何檢查Web服務是否正在運行
- 20. 如何使用vbscript掃描服務器上的開放端口?
- 21. 檢查多臺機器上的開放端口
- 22. Shellscript - 檢查運行服務
- 23. 檢查SQL服務器服務是否正在運行
- 24. 如何檢查JBoss是否在Unix服務器上運行?
- 25. 檢查PHP是否在本地服務器上運行
- 26. 如何檢查magento是否在zend服務器上運行
- 27. 如何檢查MongoDB服務器是否在pc上運行
- 28. 在端口3306上在MAMP上運行MySQL有什麼好處?
- 29. 檢查運行在窗口上的php
- 30. 在具有不同端口的服務器上運行neo4j
您可以在這裏查看http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers – Blood 2013-03-08 21:25:07
考慮[IANA知名港口](http://www.iana.org/assignments/service-names-port - 值/服務名稱,端口numbers.xml)。 – 2013-03-08 21:26:17
我知道哪些服務*在端口(22-> ssh)上運行,但我想知道的是:我如何檢查*確定*服務運行的是什麼以及它的版本。 – polslinux 2013-03-08 21:26:55