it-swarm-vi.com

Xác định quá trình nào được ràng buộc với một cổng

Tôi biết rằng sử dụng lệnh:

lsof -i TCP 

(hoặc một số biến thể của tham số với lsof) Tôi có thể xác định quá trình nào được ràng buộc với một cổng cụ thể. Điều này rất hữu ích nếu tôi đang cố gắng bắt đầu một cái gì đó muốn liên kết với 8080 và một số người khác đã sử dụng cổng đó, nhưng tôi không biết gì.

Có một cách dễ dàng để làm điều này mà không cần sử dụng lsof? Tôi dành thời gian làm việc trên nhiều hệ thống và lsof thường không được cài đặt.

92
user5721

netstat -lnp sẽ liệt kê tên pid và process process bên cạnh mỗi cổng nghe. Điều này sẽ hoạt động trong Linux, nhưng không phải tất cả những người khác (như AIX.) Thêm -t nếu bạn muốn TCP.

# 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

vân vân.

120
Cakemox

Trên AIX, netstat & rmsock có thể được sử dụng để xác định ràng buộc quy trình:

[[email protected]] 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:
[[email protected]] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (Java).
12
frielp

Một công cụ khác có sẵn trên Linux là ss. Từ trang ss man trên Fedora:

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.

Ví dụ đầu ra bên dưới - cột cuối cùng hiển thị ràng buộc quy trình:

[[email protected]] 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))
8
frielp

Đối với Solaris, bạn có thể sử dụng pfiles và sau đó grep bằng sockname: hoặc là port:.

Một mẫu (từ tại đây ):

pfiles `ptree | awk '{print $1}'` | egrep '^[0-9]|port:'
3

Tôi đã từng phải đối mặt với việc cố gắng xác định quá trình nào đằng sau một cổng cụ thể (lần này là 8000). Tôi đã thử nhiều loại lsof và netstat, nhưng sau đó đã có cơ hội và thử nhấn cổng thông qua trình duyệt (tức là http: // hostname: 8000 / ). Thật đáng ngạc nhiên, một màn hình giật gân chào đón tôi, và rõ ràng quá trình này là gì (đối với hồ sơ, đó là Splunk ).

Thêm một suy nghĩ: "ps -e -o pid, args" (YMMV) đôi khi có thể hiển thị số cổng trong danh sách đối số. Grep là bạn của bạn!

2
rickumali