Làm cách nào để liệt kê các cổng mạng mở của tôi với netstat?


206

Tôi muốn liệt kê các cổng mạng mở của mình trong Terminal với các lệnh tích hợp. Như những gì tôi biết, netstatlà lệnh để sử dụng. Nhưng tôi đang đấu tranh để có được bất kỳ thông tin hữu ích từ nó.

Làm thế nào tôi có thể liệt kê các cổng mở của tôi với netstat? Bất kỳ cờ cụ thể giúp tôi trong trường hợp này?

Câu trả lời:


309
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)

2
Cảm ơn! Tuy nhiên, đầu ra khá khó đọc, nhưng lsofđã tốt hơn một chút, cảm ơn.
Jonas

12
Bạn cần sử dụng sudo lsof .... Không có sudo, lsof chỉ có thể thấy các quy trình bạn sở hữu và do đó sẽ không hiển thị bất kỳ cổng nào được mở bởi các quy trình hệ thống. Ngoài ra, bạn có thể bỏ qua lệnh grep bằng cách nói với lsof bạn chỉ muốn xem các cổng ở trạng thái LISTEN với sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside: hãy cẩn thận với những ảnh hưởng grep -i "listen"trong 2 ví dụ của bạn.
dan

1
Với GNU netstat, bạn có thể tùy chọn liệt kê pid của quá trình mở mỗi cổng. Có cách nào để có được hành vi đó với BSD netstatkhông?
Chris

2
Tôi vừa làm, hóa ra -vcờ bật đó. Các pid sẽ ở cột thứ hai đến cuối cùng.
Chris

64

có lẽ bạn có thể sử dụng lsof:

lsof -Pn -i4

-i4 có nghĩa là chỉ hiển thị địa chỉ ipv4 và cổng -P và -n đầu ra nhanh

đầu ra như thế này

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)

2
Lệnh này làm gì?
nohillside

3
lsofliệt kê các tập tin đang mở Các ổ cắm mạng được tính là các tệp, do đó, mỗi ổ cắm mạng mở (nghe hoặc chủ động sử dụng) sẽ được liệt kê trong lsof.
Craig Trader

Nó cũng hiển thị id quá trình (netstat không)
lib

1
lsof -Pn -i6cho IPV6
Jared Burrows

2
Ít nhất một máy của tôi, câu trả lời này mất 0,1 giây, trong khi @ grgarside là 28+ s. Sự khác biệt là -i4chuyển đổi, chỉ nhìn vào địa chỉ IPv4.
Davor Cubranic

8

Phương pháp đơn giản nhất là sử dụng netstat:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

Không có bất kỳ bộ lọc bổ sung nào, để có được các tiêu đề chính xác và để xem cả hai máy chủ lắng nghe và các kết nối đã được thiết lập theo cả hai hướng. Trong ví dụ này, dòng thứ 1 thể hiện sự liên kết từ máy Mac của tôi 17.172.233.109, hướng xa hơn:

whois 17.172.233.109

đã dạy tôi nó được đặt tại Apple.


6

Đầu tiên, tôi không phải là chuyên gia về BSD, nhưng giống như OP, tôi muốn tương đương với việc chạy phần sau trên hộp * nix hoặc một cái gì đó gần gũi:

netstat -tulpn

Tôi đã đọc các câu hỏi / câu trả lời khác cung cấp lsof * và netstat * trên MacOS và tôi vẫn muốn một cái gì đó có đầu ra nhỏ gọn hơn. Vì vậy, đây là những gì tôi nhanh chóng kết hợp:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

Đó là một chút quá mức, vì vậy tôi đã thêm màu sắc vào đầu ra cho biện pháp tốt. Vì tôi sẽ không thể nhớ, hoặc muốn gõ, nên người khổng lồ này. Tôi đặt nó trong một hàm bash và sau đó chỉ cần gọi nó khi cần. Đây là chức năng bash:

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

Tôi có một bộ sưu tập nhỏ các hàm tiện lợi này trong một tệp mà tôi lấy từ ~ / .bash_profile hoặc ~ / .zshrc. Điều này đang được thêm vào bộ sưu tập. Thật thú vị khi thấy các cơ hội khác để làm cho nó đẹp hơn / mỏng hơn.

Đầu ra mẫu:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service

Vui lòng không đăng gifs của Terminal bot dán văn bản ở đây được định dạng dưới dạng mã. Thật khó để sao chép ti và cũng có thể đọc được nếu bạn cần phông chữ lớn
user151019

Hình ảnh không phải là ảnh gif, nó chỉ là một màn hình hiển thị đầu ra. Nếu bạn nhấp qua, bạn sẽ thấy đó là PNG. Được lưu trữ trên imgur .. nhưng đó là những gì StackExchange mặc định với tôi đoán. Dù sao, nếu bạn đang tìm kiếm một ảnh chụp màn hình khác, tôi có thể lấy lại.
krool

OK trong bình luận của tôi thay thế GIF bằng ảnh chụp màn hình, nó không quan trọng định dạng nào. Vấn đề là nó phải là văn bản
user151019

Vì loại bỏ lệnh dài khỏi đầu ra mẫu, giờ đây nó thực sự sẽ hoạt động tốt hơn như một ảnh chụp màn hình, vì không có gì cần phải sao chép từ nó và vì nó cũng có thể cắt tốt hơn trước.
mwfearnley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.