[英]Active services (ports) using sockets
我打算編寫一個應用程序來顯示給定IP的UDP端口范圍內是否存在活動/非活動服務。
我的第一個意圖是嘗試將套接字與地址綁定(端口包含在地址中)。 如果失敗,綁定將返回-1,並帶有錯誤的EADDRINUSE,這意味着指定的地址已被使用。 如果綁定完成,我將關閉套接字,然后轉到下一個端口。
我對插座和網絡的東西有點失落,所以我想知道我的方法是否正確,或者了解最佳方法。
謝謝
在Windows上,您可以使用GetUdpTable()
和GetUdp6Table()
向操作系統詢問活動的IPv4 / IPv6 UDP套接字列表(TCP套接字有相應的功能)。
在Linux中, /proc/net/udp
文件列出了所有打開的UDP套接字。 文件中的第二列顯示接口地址和端口號(十六進制):
[root@localhost ~]# head -n 2 /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
33: 00000000:00A1 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 9236 2 ffff8102205a8980
或者,您可以運行netstat -au
(在POSIX系統上,您可以使用popen()
系統調用來運行程序並將其輸出捕獲為FILE *
):
[root@localhost ~]# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:snmp *:*
您的bind()
技術不可靠,因為UDP允許多個綁定套接字到相同的地址(取決於套接字設置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.