it-swarm-vi.tech

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

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?

28
Codebeef

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

netstat -antp [.___.] [.___] 16297/được đặt tên [.___ * LISTEN 16297/được đặt tên [.___ 
37
Caterpillar

Đâ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à ở trạng thái LISTEN, AND (-a) thuộc về Apache (www-data) người dùng.

13
Xerxes

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

8
Matthew

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)
7
Dave Cheney
netstat -tlnp  

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

netstat -ulnp  

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

netstat -unp  

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

netstat -an

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

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

ví dụ

lsof -i [email protected]:25

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

lsof -i [email protected]:636 

để xem liệu có bất kỳ ổ cắm nào cục bộ hoặc từ xa 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

4
Jason Tan

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
Jamie

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

fuser -n tcp PORT

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

Nếu điều này là để biết một cổng có lắng nghe hay không, thì telnet cũ thực hiện thủ thuật :)

telnet 127.0.0.1 PORT

2
Oct

Bạn không đề cập đến giao thức nào bạn muốn sử dụng, ví dụ 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ắ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 đã bị ràng buộc 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ể được sử dụng chỉ 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 a.b.c.d] -p NN

sẽ cố gắng liên kết với TCP cổng NN trên (tùy chọn, mặc định sẽ là tất cả địa chỉ) a.b.c.d. 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] a.b.c.d NN

sẽ kết nối với cổng NN trên a.b.c.d, 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
colmmacc

Lớp lót 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.

2
Josiah Johnston

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 được sở hữu bởi 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 với node không chỉ nodejs hoặc thay đổi chương trình cho phù hợp)

lưu các mục sau vào một tệp có tên check-port trong đườ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.

0
Alex028502