簡體   English   中英

使用套接字的活動服務(端口)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM