Netcat이 청취 소켓을 바인딩할 수 없습니다.

Netcat이 청취 소켓을 바인딩할 수 없습니다.

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)에서 입력되는 연결을 수신하기 위해 소켓이 열립니다. 그리고 분명히 반대편에서 연결하여 데이터를 전송할 수 있습니다.

하지만 Debian 8.0 Jessie가 설치된 NAT 뒤에 있는 서버에서 다음과 같은 이상한 오류가 발생했습니다.

$ 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와 관련된 것이 있을 수 있습니까?

답변1

수신 모드의 netcat의 경우 -p플래그를 사용하여 수신 포트를 선택해야 합니다(예: ) nc -vvv -l -p 5349.

두 번째 오류: nnetfd reuseport failed : Protocol not available SO_REUSEPORT 소켓 옵션과 관련이 있습니다. 이는 Linux 커널 버전 3.9에 도입되었으며 이를 사용하는 netcat 버전은 이전 커널 릴리스에서는 작동하지 않습니다. 커널을 최신 버전으로 업그레이드하거나 netcat의 다른 변형을 사용할 수 있습니다. 나는 netcat-openbsd가 작동해야 한다고 믿습니다.

관련 정보