Linux 시스템에서 사용중인 포트와 사용 가능한 포트를 확인하려면 어떻게합니까? 번호를 찾아

Linux 시스템에서 사용 중이거나 사용 가능한 포트 번호를 찾아 나열하는 명령 행 명령 또는 다른 방법이 있습니까?



답변

명령

netstat -antu

사용중인 모든 tcp 및 udp 포트가 표시됩니다. 결과는 다음과 같습니다.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

로컬 주소 필드에서 콜론 뒤의 숫자는 사용중인 포트를 나타냅니다. 상태가 “LISTEN”인 경우 들어오는 연결에 사용중인 포트를 의미합니다. 의 IP 주소 경우 Local Address필드가되어 0.0.0.0들어오는 연결 인터페이스에 할당 된 IP 주소를 허용됩니다 의미 – 컴퓨터의 연결 원래 외부에서이 방법 때문에.

그것이 말 localhost했거나 127.0.0.1컴퓨터의 연결 만 수락하는 경우.

또한 -p매개 변수 를 추가하고 루트로 실행하면 포트를 연 프로세스가 표시됩니다.

$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN      860/rpc.statd

사용중인 것으로 표시되지 않은 것은 무료이지만 사용자 (권한이없는 계정)는 1023 이상의 포트만 열 수 있습니다.


답변

나는 작은 목록을 직접 작성 했다.

내가 좋아하는 것 중 일부는 다음과 같습니다.

netstat -tulpn
lsof -i -n -P

답변

열린 포트를 확인하는 좋고 신뢰할 수있는 방법은 ss( 더 이상 사용되지 않는 대체)을 사용하는 것이며 netstat, 높은 권한을 요구하지 않고 스크립트에서 사용할 수 있습니다 (예 🙂 sudo.

사용법 : -l수신 포트 옵션, -nDNS 확인을 무시하는 옵션 및 소스 포트의 필터 NN: src :NN( NN모니터하려는 포트로 교체 ). 더 많은 옵션을 보려면man ss

ss -ln src :NN

예 :

[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

그리고 스크립트에서 grep을 사용하여 출력에 요청한 포트가 포함되어 있는지 테스트 할 수 있습니다. 포트 80을 사용하는 예 (위 참조) :

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

포트 81을 사용하지 않는 예 (위 참조)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)

답변

또 다른 방법:

telnet localhost <PORT_NUMBER>

포트가 비어 있으면 오류가 발생합니다. 포트가 사용 중이면 텔넷이 연결됩니다.

( http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html에 있음 )