Bagaimana saya mengetahui apakah port tersedia di Ubuntu 8.04?

28

Apakah ada perintah yang bisa saya jalankan dari bash yang akan memberi tahu saya apakah port sudah terbuka?

Codebeef
sumber

Jawaban:

37

Gunakan "netstat" untuk memeriksa port yang saat ini menggunakan.

netstat -antp

Proto Recv-Q Kirim-Q Alamat Lokal Alamat Asing Negara PID / Nama program
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* DENGARKAN 16297 / bernama     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* DENGARKAN 16297 / bernama     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* DENGARKAN 16297 / bernama     
tcp 0 0 127.0.0.1:53 0.0.0.0:* DENGARKAN 16297 / bernama     
Ulat
sumber
2
"netstat -antp | grep 80" di mana 80 adalah nomor port untuk dicari.
Umair A.
13

Ini (netstat) adalah solusi tercepat ...

netstat -lnt

... tapi ini memberi Anda lebih banyak kontrol (dengan biaya kecepatan (kadang-kadang banyak kecepatan)) ...

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

Contoh di atas misalnya menunjukkan kepada Anda semua port TCP terbuka dan dalam LISTENstatus, AND ( -a) milik pengguna Apache ( www-data).

Xerxes
sumber
8

Semua jawaban bagus.

Namun Anda tidak menyebutkan apakah Anda masuk ke komputer yang dimaksud. ; P

Jika tidak, maka nmap adalah teman Anda.

untuk pemula coba:

nmap -Otarget

amap juga merupakan pilihan yang baik yang juga akan mencoba menebak perangkat lunak server dengan meraih halaman spanduk.

untuk pemula coba:

amaptarget1-6000

Matius
sumber
7

Mencoba

lsof -i :<port number>

Jika Anda mendapatkan hasil apa pun, ada sesuatu yang mendengarkan dan terikat, misalnya

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

Tampilkan tport cp yang sedang listening, tampilkan numbers saja (jangan pecahkan nama - buatlah lebih cepat) dan perlihatkan process yang melakukan mendengarkan ( phanya berfungsi jika Anda root)

netstat -ulnp  

Tampilkan uport dp yang sedang listening, tampilkan numbers saja (jangan pecahkan nama - buatlah lebih cepat) dan perlihatkan process yang melakukan mendengarkan ( phanya berfungsi jika Anda root)

netstat -unp  

Tampilkan uport dp yang terbuka tetapi tidak mendengarkan, tampilkan banyak nsaja (jangan pecahkan nama - buatlah lebih cepat) dan tunjukkan process yang melakukan mendengarkan ( phanya berfungsi jika Anda root)

netstat -an

Tampilkan all port yang digunakan, tampilkan numbers saja - jangan pecahkan nama

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

misalnya

lsof -i tcp@localhost:25

untuk melihat apakah ada yang mendengarkan di port localhost 25 / TCP, atau

lsof -i tcp@0.0.0.0:636 

untuk melihat apakah ada soket baik lokal atau jarak jauh baik mendengarkan (lokal) atau terhubung ke (lokal atau jauh) untuk setiap host / antarmuka

Jason Tan
sumber
2

lsof (daftar file yang terbuka) adalah alat yang baik untuk melihat apakah suatu proses mendengarkan pada port

lsof -P | grep: <port-number>

netstat adalah alat yang baik untuk melihat apakah ada koneksi aktif.

netstat -n | grep: <port-number>

Jamie
sumber
2

Anda tidak menyebutkan protokol apa yang ingin Anda gunakan, yaitu TCP atau UDP - dan juga penting untuk menyadari bahwa "port" tidak cukup granular yang didukung sistem untuk mengacaukan soket. Misalnya jika sistem Anda memiliki beberapa alamat IP maka port 80 mungkin digunakan pada semua alamat IP (baik aplikasi telah terikat ke "0.0.0.0" atau "::" atau ke setiap alamat IP berturut-turut), atau mungkin dalam gunakan hanya pada subset dari alamat IP tersebut.

Cara terbaik, dan paling pasti, untuk menentukan apakah port / alamat itu gratis dan tersedia adalah berusaha mengikatnya. Netcat berguna untuk ini.

nc -l [-s abcd] -p NN

akan mencoba untuk mengikat ke port TCP NN aktif (opsional, default akan menjadi semua alamat) abcd Tambahkan opsi -u untuk melakukan hal yang sama di UDP

Selanjutnya, untuk mengetahui apakah port benar-benar "terbuka" seperti yang Anda minta - Anda harus mulai melihat aturan firewall potensial. Lagi-lagi hal yang paling mudah adalah mencoba terhubung ke port. Gunakan netcat seperti di atas, di server, dan dari klien gunakan netcat untuk mencoba menyambungkan ke port yang Anda buka.

nc [-u] abcd NN

akan terhubung ke port NN pada abcd, menggunakan UDP jika flag -u ditentukan. Anda kemudian dapat mengetik input ke ujung klien, dan itu akan muncul di server. Jika tidak, Anda perlu melihat alat khusus sistem dan jaringan.

colmmacc
sumber
2

Saya menggunakan fuser (dalam paket psmisc):

fuser -n tcp PORT

Membawa kembali pid yang terikat pada port ini.

Jika ini untuk mengetahui apakah suatu port mendengarkan, telnet lama yang baik melakukan triknya :)

telnet 127.0.0.1 PORT

Oktober
sumber
2

One-liner ini akan memberi Anda daftar semua port TCP yang digunakan. Ia bekerja di bash di Ubuntu dan OS X.

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

Daftar ini akan memiliki satu port per baris tanpa informasi tambahan.

Yosia Johnston
sumber
Suka! mampir dulu untuk skrip bash, misalnya: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

Banyak cara melakukannya memberi saya masalah karena mereka tidak bekerja di linux dan osx, dan / atau karena mereka tidak menunjukkan port yang digunakan oleh buruh pelabuhan, atau proses yang dimiliki oleh root. Sekarang saya hanya menggunakan program javascript ini:

(pastikan Anda telah menginstal node dan berfungsi dengan nodetidak adil nodejsatau ubah programnya)

simpan berikut ini ke file yang disebut check-portdi jalur Anda atau di proyek Anda

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

mengatur izin

chmod +x path/to/check-port

lari dari jalurmu

check-port 8080

atau lari dari direktori yang sama

./check-port 8080

sejauh ini bekerja dengan cukup baik.

Alex028502
sumber