포트에 바인드 된 프로세스 판별


90

나는 명령을 사용하는 것을 알고있다 :

lsof -i TCP 

어떤 포트가 특정 포트에 바인딩되어 있는지 확인할 수 있습니다. 이것은 8080에 바인딩하려는 무언가를 시작하려고하는데 다른 일부가 이미 해당 포트를 사용하고 있지만, 무엇을 모르는 경우 유용합니다.

lsof를 사용하지 않고 이것을 수행하는 쉬운 방법이 있습니까? 많은 시스템에서 작업하는 데 시간이 걸리고 lsof가 종종 설치되지 않습니다.

답변:


112

netstat -lnp각 청취 포트 옆에 pid 및 프로세스 이름이 나열됩니다. 이것은 Linux에서는 작동하지만 AIX와 같은 다른 모든 시스템에서는 작동하지 않습니다. -tTCP 만 원하는 경우 추가하십시오 .

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

기타


감사합니다. RHEL에서는 작동하지만 Solaris에서는 작동하지 않는 것으로 보입니다 (표시 한대로). Solaris와 비슷한 것이 있는지 아는 사람이 있습니까?

netstat -p위는 내 투표입니다. 또한보십시오 lsof.
Rich Homolka

옆으로, Windows의 경우와 비슷합니다. netstat -aon | 더
조나단

SCTP는 어떻습니까?
sudo

12

AIX에서 netstat & rmsock을 사용하여 프로세스 바인딩을 판별 할 수 있습니다.

[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).

1
감사합니다! 그러나 rmsock을 사용하여 제거하려고 시도하는 대신 소켓에서 수신하는 프로세스를 표시하는 방법이 있습니까?
Olivier Dulac

2
@OlivierDulac : "이름에서 알 수 있듯이 rmsock은 프로세스에서 사용중인 소켓을 제거하지 않습니다. 소켓을 보유한 프로세스 만보고합니다." ( ibm.com/developerworks/community/blogs/cgaix/entry/… )
Vitor Py 2018 년

@ vitor-braga : 아 thx! 나는 그것이 노력하고 있다고 생각했지만 그것을 제거 할 수 없었을 때 어떤 프로세스가 들어 있는지 말했다. 프로세스가 보유하고있을 때 제거하려고 시도조차하지 않습니다. 멋지다! 고마워!
Olivier Dulac

8

Linux에서 사용 가능한 다른 도구는 ss 입니다. Fedora 의 ss 매뉴얼 페이지에서 :

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

아래 출력 예-마지막 열에는 프로세스 바인딩이 표시됩니다.

[root@box] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))


2

한때 특정 포트 뒤에 어떤 프로세스가 있는지 결정하려고 시도했습니다 (이번에는 8000이었습니다). 나는 다양한 lsof와 netstat를 시도했지만 기회를 얻었고 브라우저를 통해 포트를 쳤습니다 (예 : http : // hostname : 8000 / ). Lo와 보라, 스플래시 화면이 나를 맞이했고 프로세스가 무엇인지 분명해졌습니다 (레코드는 Splunk 였습니다 ).

"ps -e -o pid, args"(YMMV)가 인수 목록에 포트 번호를 표시 할 수도 있습니다. 그렙은 당신의 친구입니다!


같은 맥락 telnet hostname 8000에서 서버가 배너를 인쇄하는지 확인할 수 있습니다. 그러나 셸 액세스 권한이없는 시스템에서 서버를 실행하고 프로세스 ID를 찾는 것이 관련이없는 경우에 유용합니다.
Gilles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.