在我的电脑与Ubuntu 14.04我可以做这样的事情:
$ nc -l 5349 -vvv Listening on [0.0.0.0] (family 0, port 5349)
或这个:
$ nc -vvv -l 192.168.254.96 5349 Listening on [192.168.254.96] (family 0, port 5349)
并打开一个套接字来侦听在本地IP地址(192.168.254.96)上input连接。 显然我可以从另一端连接并传输数据。
但是在一台使用Debian 8.0 Jessie的服务器后面,我得到了这个奇怪的错误:
$ nc -vvv -l 5349 5349: inverse host lookup failed: Unknown host nnetfd reuseport failed : Protocol not available listening on [any] 38541 ... : Protocol not available
要么:
$ nc -vvv -l 10.1.6.189 5349 10.1.6.189: inverse host lookup failed: Unknown host nnetfd reuseport failed : Protocol not available listening on [any] 52606 ... : Protocol not available
该端口未被使用:
$ ss -tnl | grep 5349 (empty)
这是正确的IP地址:
$ ip addr list ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 1e:89:93:f1:96:a4 brd ff:ff:ff:ff:ff:ff inet 10.1.6.189/19 brd 10.1.31.255 scope global eth0 inet6 fe80::1c89:93ff:fef1:96a4/64 scope link valid_lft forever preferred_lft forever
可能是什么问题? 可能是与服务器后面的NAT有关的东西是?
对于监听模式下的netcat,您应该使用-p标志来select监听端口,例如nc -vvv -l -p 5349 。
第二个错误: nnetfd reuseport failed : Protocol not available与SO_REUSEPORT套接字选项有关。 它是在Linux内核版本3.9中引入的,使用它的netcat版本在早期的内核版本中不起作用。 您可以将内核升级到更新的版本,也可以使用其他版本的netcat。 我相信netcat-openbsd应该可以工作。