Bir bağlantı noktasının zaten açık olup olmadığını söyleyen bash'den çalıştırabileceğim herhangi bir komut var mı?
Şu anda bağlantı noktalarını kullanarak "netstat" kullanın.
netstat -antp Proto Recv-Q Gönder-Q Yerel Adres Yabancı Adres Durum PID/Program adı tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* DİNLE 16297/adlı Tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297/adlı Tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0: * DİNLE 16297/adlı Tcp 0 0 127.0.0.1:53 0.0.0.0:* DİNLE 16297/adlı
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ızda)) ...
lsof -n -i -a -u www-data
Yukarıdaki örnekte size TCP bağlantı noktaları açık ve LISTEN
durumunda, AND (-a
) Apache'ye ait (www-data
) kullanıcı.
Tüm iyi cevaplar.
Ancak söz konusu bilgisayarda oturum açıp açmadığınızı söylemezsiniz. P
Değilse, nmap arkadaşınızdır.
yeni başlayanlar için deneyin:
nmap -O
target
amap ayrıca afiş sayfalarını kaparak sunucu yazılımını tahmin etmeye çalışacak iyi bir seçimdir.
yeni başlayanlar için deneyin:
amap
target
1-6000
Deneyin
lsof -i :<port number>
Herhangi bir sonuç alırsanız, bir şey dinliyor ve bağlı, örn.
# 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)
netstat -tlnp
t
istening olan l
cp portlarını göster, sadece n
umbers göster (isimleri çözme - daha hızlı yapar) ve bunu yapan p
işlemini göster dinleme (p
yalnızca root iseniz çalışır)
netstat -ulnp
u
istening olan l
dp bağlantı noktalarını göster, yalnızca n
umbers göster (adları çözme - daha hızlı hale getirir) ve bunu yapan p
işlemini göster dinleme (p
yalnızca root iseniz çalışır)
netstat -unp
Açık olan ancak dinlemeyen u
dp bağlantı noktalarını göster, yalnızca n
umbers göster (adları çözme - daha hızlı olmasını sağlar) ve dinlemeyi yapan p
işlemini göster ( p
yalnızca root iseniz çalışır)
netstat -an
Kullanımda olan a
ll portlarını göster, sadece n
umbers göster - isimleri çözme
lsof -i <proto>@<Host>:<port>
örneğin
lsof -i [email protected]:25
localhost 25/TCP'de bir şey dinleyip dinlemediğini görmek için veya
lsof -i [email protected]:636
herhangi bir Ana Bilgisayar/arabirim için dinleyen (yerel) veya bağlı (yerel veya uzak) herhangi bir soket olup olmadığını görmek için
lsof (açık dosyaları listele), bir işlemin bir bağlantı noktasında dinleyip dinlemediğini görmek için iyi bir araçtır
lsof -P | grep: <port- sayı>
netstat, aktif bağlantı olup olmadığını görmek için iyi bir araçtır.
netstat -n | grep: <port- sayı>
kaynaştırıcı (psmisc paketinde) kullanıyorum:
kaynaştırıcı -n tcp LİMANI
Bu bağlantı noktasına bağlı işlemin pid değerini geri getirir.
Bu, bir portun dinleyip dinlemediğini bilmekse, iyi eski telnet hile yapar :)
telnet 127.0.0.1 BAĞLANTI NOKTASI
Hangi protokolü kullanmak istediğinizden bahsetmezsiniz, yani TCP veya UDP -) ve “port” un, sistemin soketleri ayırmak için desteklediği kadar ayrıntılı olmadığını fark etmek de önemlidir. sisteminizde birden fazla IP adresi varsa, 80 numaralı bağlantı noktası tüm IP adreslerinde kullanımda olabilir (uygulama "0.0.0.0" veya "::" veya art arda her bir IP adresine bağlanmıştır) veya kullanımda olabilir yalnızca bu IP adreslerinin bir alt kümesinde.
Bir bağlantı noktasının/adresin ücretsiz ve kullanılabilir 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 a.b.c.d] -p NN
TCP port NN açık (isteğe bağlı, varsayılan tüm adresler olacaktır)) bağlanmaya çalışır. a.b.c.d. UDP'de de aynısını yapmak için -u seçeneğini ekleyin.
Ardından, bağlantı noktasının sorduğunuzda gerçekten "açık" olup olmadığını söylemek için - potansiyel güvenlik duvarı kurallarına bakmaya başlamanız gerekir. Yine en kolay şey limana bağlanmaya çalışmaktır. Netcat'i yukarıdaki gibi, sunucuda kullanın ve bir istemciden açtığınız bağlantı noktasına bağlanmayı denemek için netcat'i kullanın.
nc [-u] a.b.c.d NN
-u bayrağı belirtilirse UDP kullanarak a.b.c.d üzerindeki NN bağlantı noktasına bağlanır. Daha sonra input'u client end'e yazabilirsiniz ve sunucuda görünmelidir. Başlamazsa, sistem ve ağa özgü araçlara bakmanız gerekir.
Bu tek astar size kullanılan tüm TCP bağlantı noktalarının bir listesini alır.
netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq
Listede ek bilgi olmadan hat başına bir bağlantı noktası olacaktır.
Bunu yapmanın birçok yolu bana linux ve osx üzerinde çalışmadığı ve/veya docker tarafından kullanılan portları veya kökün sahip olduğu işlemleri göstermedikleri için sorunlar verdi. Şimdi sadece bu javascript programını kullanıyorum:
(düğümün kurulu olduğundan ve yalnızca node
ile değil nodejs
ile çalıştığından emin olun veya programı uygun şekilde değiştirin)
aşağıdakileri check-port
yolunuzda veya projenizde
#!/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 koş
check-port 8080
veya aynı dizinden çalıştır
./check-port 8080
şu ana kadar gayet iyi çalışıyor.