Làm cách nào để biết liệu một cổng có sẵn trên Ubuntu 8.04 không?


28

Có lệnh nào tôi có thể chạy từ bash sẽ cho tôi biết liệu một cổng đã được mở chưa?

Câu trả lời:


37

Sử dụng "netstat" để kiểm tra các cổng hiện tại.

netstat -antp

Proto Recv-Q Send-Q Địa chỉ địa phương Trạng thái địa chỉ nước ngoài PID / Tên chương trình
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* NGHE 16297 / được đặt tên     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* NGHE 16297 / được đặt tên     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* NGHE 16297 / được đặt tên     
tcp 0 0 127.0.0.1:53 0.0.0.0:* NGHE 16297 / được đặt tên     

2
"netstat -antp | grep 80" trong đó 80 là số cổng để tìm kiếm.
Umair A.

13

Đây (netstat) là giải pháp nhanh nhất ...

netstat -lnt

... nhưng điều này cho phép bạn kiểm soát nhiều hơn (với chi phí tốc độ (đôi khi rất nhiều tốc độ)) ...

lsof -n -i -a -u www-data

Ví dụ trên ví dụ cho bạn thấy tất cả các cổng TCP mở và ở LISTENtrạng thái, AND ( -a) thuộc về người dùng Apache ( www-data).


8

Tất cả các câu trả lời tốt.

Tuy nhiên, bạn không đề cập đến nếu bạn đang đăng nhập vào máy tính. ; P

Nếu không, thì nmap là bạn của bạn.

để bắt đầu thử:

nmap -Otarget

amap cũng là một lựa chọn tốt cũng sẽ cố gắng đoán phần mềm máy chủ bằng cách lấy các trang banner.

để bắt đầu thử:

amaptarget1-6000


7

Thử

lsof -i :<port number>

Nếu bạn nhận được bất kỳ kết quả nào, một cái gì đó đang lắng nghe và ràng buộc, ví dụ

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

4
netstat -tlnp  

Hiển thị tcác cổng cp đang lhoạt động, chỉ hiển thị các nô (không giải quyết tên - làm cho nó nhanh hơn) và hiển thị chế pđộ nghe đang thực hiện ( pchỉ hoạt động nếu bạn đã root)

netstat -ulnp  

Hiển thị ucác cổng dp đang lhoạt động, chỉ hiển thị các nô (không giải quyết tên - làm cho nó nhanh hơn) và hiển thị chế pđộ nghe đang thực hiện ( pchỉ hoạt động nếu bạn đã root)

netstat -unp  

Hiển thị ucác cổng dp đang mở nhưng không nghe, chỉ hiển thị các nô (không giải quyết tên - làm cho nó nhanh hơn) và hiển thị chế pđộ nghe đang thực hiện ( pchỉ hoạt động nếu bạn đã root)

netstat -an

Hiển thị acác cổng đang sử dụng, chỉ hiển thị các nô - không giải quyết tên

lsof -i <proto>@<host>:<port>

ví dụ

lsof -i tcp@localhost:25

để xem có gì đang lắng nghe trên cổng localhost 25 / TCP hay không

lsof -i tcp@0.0.0.0:636 

để xem liệu có bất kỳ ổ cắm nào cục bộ hoặc từ xa hoặc nghe (cục bộ) hoặc được kết nối với (cục bộ hoặc từ xa) cho bất kỳ máy chủ / giao diện nào


2

lsof (liệt kê các tệp đang mở) là một công cụ tốt để xem liệu một quá trình có lắng nghe trên một cổng không

lsof -P | grep: <số cổng>

netstat là một công cụ tốt để xem nếu có bất kỳ kết nối hoạt động.

netstat -n | grep: <số cổng>


2

Bạn không đề cập đến giao thức nào bạn muốn sử dụng, tức là TCP hoặc UDP - và điều quan trọng là phải nhận ra rằng "cổng" không hoàn toàn giống như hệ thống hỗ trợ để phân tán các ổ cắm. Ví dụ: nếu hệ thống của bạn có nhiều địa chỉ IP thì cổng 80 có thể được sử dụng trên tất cả các địa chỉ IP (ứng dụng đã liên kết với "0.0.0.0" hoặc "::" hoặc với từng địa chỉ IP liên tiếp) hoặc có thể nằm trong địa chỉ IP chỉ sử dụng trên một tập hợp con của các địa chỉ IP đó.

Cách tốt nhất và chắc chắn nhất để xác định xem một cổng / địa chỉ là miễn phí và có sẵn là cố gắng liên kết với nó. Netcat là tiện dụng cho việc này.

nc -l [-s abcd] -p NN

sẽ cố gắng liên kết với cổng TCP NN trên (tùy chọn, mặc định sẽ là tất cả các địa chỉ) abcd Thêm tùy chọn -u để làm tương tự trong UDP.

Tiếp theo, để biết cổng có thực sự "mở" như bạn yêu cầu hay không - bạn cần bắt đầu xem xét các quy tắc tường lửa tiềm năng. Một lần nữa, điều dễ nhất là cố gắng kết nối với cổng. Sử dụng netcat như trên, trên máy chủ và từ máy khách sử dụng netcat để cố gắng kết nối với cổng bạn đã mở.

nc [-u] abcd NN

sẽ kết nối với cổng NN trên abcd, sử dụng UDP nếu cờ -u được chỉ định. Sau đó, bạn có thể nhập dữ liệu vào cuối máy khách và nó sẽ hiển thị trên máy chủ. Nếu không, bạn cần xem xét các công cụ cụ thể của hệ thống và mạng.


2

Tôi sử dụng fuser (trong gói psmisc):

fuser -n tcp PORT

Mang lại pid của quá trình ràng buộc với cổng này.

Nếu điều này là để biết nếu một cổng đang lắng nghe, telnet cũ tốt sẽ thực hiện thủ thuật :)

telnet 127.0.0.1 PORT


2

Điều này sẽ giúp bạn có một danh sách tất cả các cổng TCP đang sử dụng. Nó hoạt động trong bash trên Ubuntu và OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

Danh sách sẽ có một cổng trên mỗi dòng mà không có thêm thông tin.


Yêu nó! gret thả vào cho các tập lệnh bash, ví dụ:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki

0

Rất nhiều cách thực hiện đã mang lại cho tôi các vấn đề vì chúng không hoạt động trên linux và osx và / hoặc vì chúng không hiển thị các cổng được sử dụng bởi docker hoặc các quy trình thuộc sở hữu của root. Bây giờ tôi chỉ sử dụng chương trình javascript này:

(đảm bảo rằng bạn đã cài đặt nút và nó hoạt động nodekhông chỉ nodejshoặc thay đổi chương trình phù hợp)

lưu các mục sau vào một tệp được gọi check-porttrong đường dẫn của bạn hoặc trong dự án của bạn

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

đặt quyền

chmod +x path/to/check-port

chạy từ con đường của bạn

check-port 8080

hoặc chạy từ cùng một thư mục

./check-port 8080

Cho đến nay nó đang hoạt động khá tốt.

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.