我想使用带端口的套接字,任何可用的端口。但我真的不知道该怎么做
这是我试过的:
s_in.sin_family = AF_INET;
s_in.sin_port = htons(0);
s_in.sin_addr.s_addr = INADDR_ANY;
有什么想法吗?
答案 0 :(得分:3)
AFAIK,你做不到。一种解决方案是使用端口转换。如果您使用的是Linux,则可以执行以下操作:
iptables -t nat -A PREROUTING -d 128.66.0.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -d 128.66.0.1/32 -p tcp -m tcp --dport 1:65535 -j DNAT --to-destination 128.66.0.1:11944
这会将除端口22之外的所有端口(端口22除外)映射到端口11944.然后,您只需绑定到程序中的端口11944。
答案 1 :(得分:1)
这取决于你想要做什么。如果要接收数据,则必须将套接字绑定到端口。这就是港口的目的。您可以设置"原始套接字",但这意味着您必须自己处理传输层标头:您不能忘记它们。
如果您只想发送UDP数据报,可以sendto
之前bind
。任何可用的端口都将用作源。
答案 2 :(得分:-3)
如果您正在寻找可用的端口,您可以从1024到65355循环,尝试在第一个可用的端口上绑定套接字。
如果您想捕捉每个港口,您正在寻找的是RAW SOCKET。
此处有更多信息:https://en.wikipedia.org/wiki/Raw_socket
这里是linux:http://linux.die.net/man/7/raw