Ubuntu 8.04'te bir portun mevcut olup olmadığını nasıl öğrenirim?


28

Bir portun zaten açık olup olmadığını söyleyen bash'den çalıştırabileceğim herhangi bir komut var mı?

Yanıtlar:


37

Şu anda portları kullanarak kontrol etmek için "netstat" kullanın.

netstat -antp

Proto Recv-Q Send-Q Yerel Adres Yabancı Adres Durumu PID / Program adı
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LİSTEN 16297 / adlandırılmış     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LİSTEN 16297 / adlandırılmış     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LİSTEN 16297 / adlandırılmış     
tcp 0 0 127.0.0.1:53 0.0.0.0:* LİSTEN 16297 / isimli     

2
"netstat -antp | grep 80", 80'de aranacak bağlantı noktası numarasıdır.
Umair A.

13

Bu (netstat) en hızlı çözümdür ...

netstat -lnt

... ama bu size daha fazla kontrol sağlar (hız pahasına (bazen çok fazla hız)) ...

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

Örneğin, yukarıdaki örnek , Apache ( ) kullanıcısına ait olan LISTENVE ( -a) durumundaki tüm TCP bağlantı noktalarını açık ve gösterir www-data.


8

Tüm iyi cevaplar.

Ancak söz konusu bilgisayara giriş yapıp yapmadığınızdan bahsetmiyorsunuz. P

Değilse, nmap senin arkadaşın.

yeni başlayanlar için deneyin:

nmap -Otarget

amap ayrıca, banner sayfalarını alarak sunucu yazılımını tahmin etmeye çalışacak iyi bir seçimdir.

yeni başlayanlar için deneyin:

amaptarget1-6000


7

Deneyin

lsof -i :<port number>

Herhangi bir sonuç alırsanız, bir şeyler dinler ve sınırlar, örneğin;

# 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  

İstenilen tcp portlarını göster l, nyalnızca kullanıcılara göster (isimleri çözme - daha hızlı olmasını sağlar) ve pdinleyen işi göster ( psadece root isen)

netstat -ulnp  

İstenilen udp portlarını göster l, nyalnızca kullanıcılara göster (isimleri çözme - daha hızlı olmasını sağlar) ve pdinleyen işi göster ( psadece root isen)

netstat -unp  

uAçık olan ancak dinlemeyen dp portlarını göster , nyalnızca kullanıcılara göster (isimleri çözme - daha hızlı olmasını sağlar) ve pdinleyen işi göster ( psadece root iseniz)

netstat -an

aKullanımdaki tüm bağlantı noktalarını göster , nyalnızca üyelere göster - adları çözümlemeyin

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

Örneğin

lsof -i tcp@localhost:25

localhost 25 / TCP portunda bir şey dinleyip dinlemediğini görmek için veya

lsof -i tcp@0.0.0.0:636 

Herhangi bir ana bilgisayar / arabirim için yerel ya da uzak ya dinleyen (yerel) ya da bağlı (yerel ya da uzak) soket olup olmadığını görmek için


2

lsof (açık dosyaları listele) bir işlemin bir bağlantı noktasını dinleyip dinlemediğini görmek için iyi bir araçtır

lsof -P | grep: <port-number>

netstat, aktif bağlantı olup olmadığını görmek için iyi bir araçtır.

netstat -n | grep: <port-number>


2

Hangi protokolü kullanmak istediğinizden bahsetmiyorsunuz, yani TCP veya UDP - ve ayrıca “port” un sistemin yuvaları ayırmak için desteklediği kadar ayrıntılı olmadığını anlamak da önemlidir. Örneğin, sisteminizde birden fazla IP adresi varsa, 80 numaralı bağlantı noktası tüm IP adreslerinde kullanılıyor olabilir (uygulama "0.0.0.0" veya "::" ya da arka arkaya gelen her IP adresine bağlı olabilir) veya Yalnızca bu IP adreslerinin bir alt kümesinde kullanın.

Bir portun / adresin serbest ve müsait olup olmadığını belirlemenin en iyi ve en kesin yolu ona bağlanmaya çalışmaktır. Netcat bunun için kullanışlıdır.

nc-l [-s abcd] -p NN

TCP NN bağlantı noktasına bağlanmaya çalışacaktır (isteğe bağlı, varsayılan tüm adresler olacaktır) abcd UDP'de aynı yapmak için -u seçeneğini ekleyin.

Ardından, bağlantı noktasının istediğiniz gibi gerçekten "açık" olup olmadığını anlamak için potansiyel güvenlik duvarı kurallarına bakmaya başlamanız gerekir. Yine en kolay şey, limana bağlanmayı denemek. Sunucuda yukarıdaki gibi netcat kullanın ve bir istemciden açtığınız bağlantı noktasına bağlanmayı denemek için netcat kullanın.

nc [-u] abcd NN

-u bayrağı belirtilmişse UDP kullanarak abcd'deki NN bağlantı noktasına bağlanacaktır. Daha sonra istemci sonuna girdi yazabilirsiniz ve sunucuda görünmelidir. Olmazsa, sisteme ve ağa özel araçlara bakmanız gerekir.


2

Kullandığım Füzeri (paket psmisc cinsinden):

kaynaştırıcı -n tcp PORT

Geri getirir pid bu bağlantı noktasına bağlı sürecin.

Eğer bu bir portun dinlenip dinlenmediğini bilmekse, eski güzel telnet hile yapar :)

telnet 127.0.0.1 PORT


2

Bu tek astar, kullanılan tüm TCP bağlantı noktalarının bir listesini alır. Ubuntu ve OS X'te bash olarak çalışır.

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

Listede herhangi bir ekstra bilgi olmadan satır başına bir port bulunacaktır.


Sevdim! bash scriptleri için gret bırak, örneğin: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

Bunu yapmanın birçok yolu bana sorunları verdi çünkü linux ve osx üzerinde çalışmadılar, ve / veya liman işçisi tarafından kullanılan portları veya kök tarafından sahip olunan işlemleri göstermedikleri için. Şimdi sadece bu javascript programını kullanıyorum:

(Düğümün kurulu olduğundan ve programın nodeyalnızca nodejsprogramla aynı şekilde değiştirilmediğinden emin olun )

aşağıdakileri check-portyolunuzda veya projenizde adı verilen bir dosyaya kaydedin.

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

izinleri ayarla

chmod +x path/to/check-port

yolundan kaç

check-port 8080

veya aynı dizinden koş

./check-port 8080

Şimdiye kadar oldukça iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.