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


30

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

답변:


41

명령

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 이상의 포트만 열 수 있습니다.


인터페이스에 할당 된 모든 IP 주소에서 들어오는 연결을 수락 한다는 의미입니다. 따라서 컴퓨터 외부 에서 시작된 연결에서 오류가 발생하지 않았습니까? 원래 인터페이스에 관계없이 지정된 인터페이스에 할당 된 주소가 있으면 연결이 허용됩니다. 들어오는 연결의 출처는 아마도 다음 열 Foreign Address에 명시되어있을 것입니다. 따라서 값이 0.0.0.0이면 시스템 외부를 포함하여 어느 곳에서나 연결이 허용됨을 의미합니다.
user907860

1
@ user907860 명확하지는 않지만 0.0.0.0과 127.0.0.1 사이의 차이점은 라우팅되지 않은 IP 주소에서 수신 대기 중이므로 후자는 시스템의 연결 만 허용합니다. 0.0.0.0은 시스템의 모든 주소를 의미하므로 라우팅되는 경우 다른 시스템에서 연결할 수 있습니다.
Paul

참고 -antu-tuna🐟 로 쓸 수 있습니다
Abdennour TOUMI


7

열린 포트를 확인하는 좋고 신뢰할 수있는 방법은 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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.