프로세스 PID가 수신 대기중인 포트를 나열합니까 (iproute2 도구를 사용하는 것이 바람직 함)?


68

PID가 현재 수신중인 모든 포트를 나열하려고합니다.

프로세스에 대한 이런 종류의 데이터를 얻는 것이 어떻게 권장됩니까?


이상한 충분히 ss넷 링크 소켓을 제외하고 PID에는 필터링이 없습니다.
poige

답변:


56

ssiproute2 패키지 (와 유사한 netstat) 에서 사용할 수 있습니다 .

ss -l -p -n | grep "pid=1234,"

또는 (이전 iproute2 버전의 경우) :

ss -l -p -n | grep ",1234,"

1234를 프로그램의 PID로 바꾸십시오.


3
도 있습니다 -u또는 -t단지 UDB 또는 TCP를 위해. : +1 : 그리고 이것들은 모두 다음과 같이 쌓을 수 있습니다 : ss -tlnp, 그리고 채우기 너비 출력을 제거하기 위해 성가신 고양이 나 그 이하로 파이프 할 수 있습니다 :ss -tlnp | cat
ThorSummoner

1
나는 습관에 들어갔습니다. ss -nlp | cat대략, 청취 프로세스 (-l), 포트 번호 (-n) 및 프로세스 정보 (-p)를 보여주고 출력을 쉘에 맞추려고하지 않습니다 | cat( 이하 또는 무엇이든). D
ThorSummoner

나를 위해 일하지 않았다 (Debian 9에서). 거기에서 ", pid = 1234"에 대해 grep해야합니다
ofrommel

@ ofrommel 힌트 주셔서 감사합니다-나는 대답을 수정했습니다.
jofel

또한 이것은 루트 권한으로 만 작동합니다 :)
ofrommel

56

iproute2도구를 사용하는 방법을 모릅니다. 그러나 해결 방법으로 이것을 시도해 볼 수 있습니다.

lsof -Pan -p PID -i

찾고있는 정보를 제공해야합니다.


산출

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)

나는이 명령을 여기 에서 얻었 지만 노트북에 모두 적어 놓았으므로 정확한 링크를 확신하지 못합니다. 그러나 거기에서도 확인할 수 있습니다.


13

netstat이를 위해 각 청취 프로세스의 pid를 파악할 수 있습니다 .

netstat-네트워크 연결, 라우팅 테이블, 인터페이스 통계, 가장 무도회 연결 및 멀티 캐스트 멤버쉽 인쇄

-a, --all 청취 및 비 청취 (TCP의 경우 설정된 연결을 의미 함) 소켓을 모두 표시합니다. --interfaces 옵션을 사용하여 표시되지 않은 인터페이스를 표시하십시오.

--numeric, -n 기호 호스트, 포트 또는 사용자 이름을 확인하는 대신 숫자 주소를 표시합니다.

-p, --program 각 소켓이 속하는 프로그램의 PID 및 이름을 표시합니다.

예를 들면 다음과 같습니다.

# netstat -anp
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:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd

1
netstatiproute2 도구에서 더 이상 사용되지 않는다는 알림 을 받았지만이 를 피하려고합니다.
ThorSummoner

12

@jofel의 대답 은 사용하기에 적합한 도구를 보여줍니다 ss. iproute2의 다른 네트워킹 도구를 대체합니다.

더 이상 사용되지 않는 명령 및 해당 iproute2는 다음과 같습니다.

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)

: 기본 목록은 위키 백과에 여기에 있습니다 http://en.wikipedia.org/wiki/Iproute2 .

참고 문헌


1

lsofPID를 모르고 프로그램 이름 만 알 수있는 또 다른 방법 :

lsof -Pa -p $(pgrep [programName]) -i

lsof우분투 16.04 에서 4.89 와 작동하지 않습니다
palik

1
프로그램이 여러 프로세스를 생성 한 경우에 해당합니다.이 경우 lsof 명령을 실행할 때 특정 PID를 지정해야합니다. pgrep <program name>그런 다음 위 명령에 필요한 PID를 선택하십시오. $(pgrep [programName])PID #로 대체
cryptoboy

0

당신도 시도 했습니까, 이것도 마찬가지입니다.

netstat -plnt | grep 27071

성공

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