Linux에서 열린 포트 목록 가져 오기


191

응용 프로그램에서 사용하기 위해 모든 열린 포트를 나열하려면 Linux 명령이 필요합니다

lsof -i TCP| fgrep LISTEN

목록에있는 포트가 반드시 사용 가능한 것은 아니기 때문에 도움이되지는 않습니다. 사용하지 않는 열린 포트를 어떻게 나열합니까?

답변:


258
netstat -lntu

@askmish에 의해 응답 된 것처럼 tcp 및 udp 포트에서 시스템에서 실행되는 서비스 목록을 제공합니다.

  • -l = 일부 포트에서 수신 대기중인 서비스 만
  • -n = 포트 번호 표시, 서비스 이름을 확인하지 마십시오
  • -t = TCP 포트
  • -u = UDP 포트
  • -p = 프로그램 이름

사용 가능한 포트가 있고 어떤 프로그램이 실행 중인지에 관심이 있으므로 'p'매개 변수가 필요하지 않습니다.

그래도 시스템의 어느 포트가 사용되는지 보여줍니다. 예를 들어 NAT 뒤에 있고 외부에서 일부 서비스에 액세스하려는 경우 네트워크 상태를 알 수 없습니다. 또는 방화벽이 외부 방문자의 포트를 차단하는 경우. 이 경우 nmap이 구조에 온다. 경고 : 제어가 가능한 네트워크에서만 nmap을 사용하십시오. 또한 nmap 핑을 차단할 수있는 방화벽 규칙이 있으므로 올바른 결과를 얻으려면 옵션을 검토해야합니다.


19
그 참고 netstat많은 시스템에서 사용되지 않으며 ss대신 사용해야합니다.
Johu

1
하지만 당신이 busybox ss에 포함되어 있지 않은 경우
jcollum

90

이후 net-tools사용되지 않습니다 , 당신은 사용할 수있는 ss명령 대신의 netstat경우 netstat컴퓨터에없는입니다 :

ss -lntu

와 비슷하게 작동해야합니다

netstat -lntu

내장 된 도움말에 따르면 :

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
또 다른 유용한 플래그는 소켓의 프로세스 ID를 보여주는 -p입니다.
Talespin_Kit

21

이 명령은 열린 네트워크 포트와 포트를 소유 한 프로세스를 나열합니다.

netstat -lnptu

그런 다음 결과를 정확한 사양으로 필터링 할 수 있습니다.

nmap포트에 대한보다 세분화 된 결과를 위해 사용할 수도 있습니다 .


2
-p 플래그는 일부 프로세스에 대한 루트 권한이 필요합니다, 그래서 것sudo netstat -lnptu
클라우스 자체

5

응답 트래픽을 포함한 모든 열린 포트 :

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
목록 단지 : 고유 한 포트 번호와 IPv4 만netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
아론 C. 드 Bruyn

결과에서 숫자를 필터링하고 추출하는 방법을 보여주는 +1 netstat에서 stderr 출력을 제거하도록 편집했습니다 (Ubuntu의 결과에 헤더를 추가 함).
datashaman

흠, 두 번째 생각에. 질문에 대답하지 않은 경우 -1입니다.
datashaman

1

원래 질문에 대한 나의 취향은 그가 현재 서비스에 연결된 포트가 아니라 사용되지 않은 포트에 대해 묻는 것입니다. 이 경우에는 사용 된 포트를 나열하고 다른 포트는 사용하지 않는 것 외에 다른 방법으로 포트를 나열 할 수 없습니다.

명심해야 할 추가 사항 : 사용자는 1024보다 작은 포트를 열 수 없습니다 (그에 대한 루트 권한이 필요합니다).


0

다음 명령은 Ubuntu / Debian과 동일한 형식으로 출력되는 모든 Unix에서 작동합니다. 여기서 로컬 주소는 4 열에 있고 출력은 맨 위에 2 줄 헤더를 포함합니다. 그 숫자 중 하나가 다른 경우 아래 awk 명령을 조정하십시오.

IPv4 만 원하는 경우 :

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

IPv6 만 원하는 경우 :

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

둘 다 원하는 경우 :

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

이 명령은 모든 인터페이스에서 수신 대기중인 포트 번호 목록을 출력합니다. localhost 인터페이스에서 수신 대기중인 모든 포트를 나열하려면 다음과 같이 사용하십시오.

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

시험

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

이것을보십시오.

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