使用套接字的活动服务(端口)

时间:2014-01-19 19:39:47

标签: c sockets unix port

我打算编写一个应用程序来显示给定IP的UDP端口范围内是否存在活动/非活动服务。

我的第一个意图是尝试将套接字与地址绑定(端口包含在地址中)。如果失败,绑定将返回-1,并带有错误的EADDRINUSE,这意味着指定的地址已被使用。如果绑定完成,我将关闭套接字,然后转到下一个端口。

我对套接字和网络有点遗失,所以我想知道我的方法是否正确,或者了解最佳方法。

由于

2 个答案:

答案 0 :(得分:1)

在Windows上,您可以使用GetUdpTable()GetUdp6Table()向操作系统询问有效的IPv4 / IPv6 UDP套接字列表(TCP套接字有相应的功能)。

答案 1 :(得分:1)

在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允许多个绑定套接字到相同的地址(取决于套接字设置)。