我想知道服务器和客户端的间隔端口号是多少。我有一个端口号列表,我需要分离客户端和服务器。
答案 0 :(得分:0)
您不能仅基于端口号将单独的服务器与客户端分开。
例如
my_addr1.sin_family = AF_INET;
my_addr1.sin_addr.s_addr = INADDR_ANY;
my_addr1.sin_port = htons(12010);
my_addr1.sin_addr.s_addr = inet_addr("10.11.12.13");
if (bind(client, (struct sockaddr*) &my_addr1, sizeof(struct sockaddr_in)) == 0)
printf("Binded Correctly\n");
else
printf("Unable to bind\n");
将您的客户端显式绑定到端口12010(有关完整的演示,请参见https://www.geeksforgeeks.org/explicitly-assigning-port-number-client-socket/)。服务器也是如此:您可以轻松地让服务器侦听某些特定的TCP(或UDP)端口。
幸运的是,在服务名称和传输协议端口号注册表中,有许多众所周知的端口,由IANA(互联网地址分配机构)保存。任何有思想的组织都应该(https://www.ietf.org/rfc/rfc2119.txt)尊重这些任务。但是并不能保证,“客户端”和“服务器”可能与您的期望有所不同(请参见f.e. 123:NTP)。
同样,表现良好的客户端通常使用临时端口号。这些是高端口号,当程序要求可用端口时,操作系统会分发这些端口号。使事情变得复杂:临时端口因操作系统而异:
OS from to comment
AIX 32768 65535
BSD 49152 65535
Slackware 32768 60999 cat /proc/sys/net/ipv4/ip_local_port_range
Windows 5000 65534 may differ per version.
更糟的是,有portmapper
,它或多或少地动态地为服务器分配端口号(通常为100001及更高版本)。但是在NFS之外很少使用。
因此,您可以根据IANA众所周知的端口号和OS-s中的临时端口范围进行合理的假设,但不能保证它是正确的。
在Linux上,使用sudo netstat -lpe
查看服务器列表。在其他操作系统上,请参见netstat
的手册页或文档以获取适当的标志。