Uzak ana bilgisayardaki bir bağlantı noktasının durumunu kontrol etme [kapalı]


158

Uzak bir ana bilgisayardaki bağlantı noktası durumunu kontrol edebilen bir komut satırına ihtiyacım var. Denedim ping xxx.xxx.xxx.xxx:161ama "ev sahibi" tanımıyor. Ben aynı bağlantı noktası açık olduğunu biliyorum bir ana bilgisayar karşı aynı komutu yapana kadar "iyi" bir cevap olduğunu düşündüm. Bu, Windows'ta uzak bağlantı noktasının durumunu kontrol edecek ve daha sonra bilgi için o uzak bağlantı noktasını kullanan bir komut, daha sonra uzak bağlantı noktası kontrol komutunu, daha sonra bilgi için bir sonraki sunucuda o bağlantı noktasını kullanan komutu çalıştıracak bir toplu iş dosyası içindir. , ve bunun gibi. Her yere baktım ve ping'in bunu yapabileceğini düşündüm, ancak ping'in çeşitli sürümleri olmalı, sanırım bunu yaptığım sunucu bu seçeneği göstermiyor.

Sadece kıkırdama için, bir web sitesinden web tabanlı bir uzaktan bağlantı noktası denetleyicisini denedim - ve sonuçlar hem "sorun" sunucusu hem de doğru sunucu için doğruydu. Ancak, içinde 500+ sunucu IP'leri ile bir toplu iş çalıştıramazsınız.

Yapabileceğim basit bir şey var mı? Perl becerilerim son derece paslı (kullan veya kaybet), toplu iş dışında Windows tabanlı başka bir dil bilmiyorum. Unix benim yeteneğim, ancak bu Widows Server 2003 yürütülmelidir.


5
Bunu serverfault.com'da sormayı deneyebilirsiniz
John Rasch


1
Bu soru kapandığı için burada
npocmaka


pencereler ps> tnc xxx.xxx.xxx.xxx -port 161
Müslüman Şahsavan

Yanıtlar:


151

Her ikisi de Windows, Linux ve Mac OS X için kullanılabilen nmap veya netcat gibi bir bağlantı noktası tarayıcısı arıyorsunuz .

Örneğin, bilinen bir IP'de telnet olup olmadığını kontrol edin:

nmap -A 192.168.0.5/32 -p 23

Örneğin, host.example.com'da 20'den 30'a kadar açık bağlantı noktaları arayın:

nc -z host.example.com 20-30

Bunların her ikisi de Windows için kullanılabilir.
Glenn

1
nmap komutunuz boşluk olmadan gerçek "-p23" olmalıdır. nmap her birimin hemen önünde bir bayrağını ayrı bir tarama hedefi olarak görmez
Brandon Lebedev

14
olmalı nc -zv host.example.com 20-30. aksi takdirde çıktı yok
Aryeh Beitz

1
Seçenek -ziçin ncLinux üzerinde kullanılamaz.
valentin_nasta

1
@valentin_nasta evet, belki de hangi netcat sürümünü kullandığınıza bağlı olarak (gnu veya openbsd). İşte Arch linux sistemimdeki nc (openbsd sürümü) için man sayfasından ilgili satır: -z nc'nin, onlara herhangi bir veri göndermeden sadece dinleyen cinleri taraması gerektiğini belirtir. Bu seçeneği -l seçeneği ile birlikte kullanmak bir hatadır
pgoetz

126

Komut İstemi'nde telnet komutunu kullanabilirsiniz. Örneğin, IP 192.168.10.1'e bağlantı noktası 80 ile bağlanmak için,

telnet 192.168.10.1 80

Windows 7 ve sonraki sürümlerde telnet'i etkinleştirmek için tıklayın . Bağlantılı makaleden, kontrol panelinden -> programlar ve özellikler -> windows özellikleri -> telnet istemcisi aracılığıyla telnet'i etkinleştirin veya bunu bir yönetici isteminde çalıştırın:

dism /online /Enable-Feature /FeatureName:TelnetClient

3
Telnet Windows cihazına yüklüyse en kolay yöntem budur
shonky linux kullanıcısı

30
... ve pencerelere eklemek 2 saniye sürüyor (benim durumumda 8.1)> Denetim Masası> Program Ekle> Pencere özelliklerini aç
Chris Moutray

14
Sadece bilgi için: bağlantı noktası açık değilse: Bağlanıyor ##### ... Ana bilgisayara bağlantı açılamadı, ####: Bağlantı başarısız; Ve bağlantı noktası açıksa, telnet (CTRL +] ile sonuçlanırsınız, ardından 'çık')
blackstrype

27

Komut dosyası oluşturma amacıyla, curlkomutun bunu yapabileceğini buldum , örneğin:

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

curlBazı durumlarda (yorum başına) farklı hata kodları döndürebileceği gibi , tüm hizmetler için çalışmayabilir , bu nedenle aşağıdaki koşulu eklemek güvenilir bir şekilde çalışabilir:

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

Not: -m55 saniyelik maksimum bağlantı zaman aşımını ayarlamak için eklendi .

Ana bilgisayarın geçerli olup olmadığını da kontrol etmek istiyorsanız, 6çıkış kodunu da kontrol etmeniz gerekir :

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve host: foo
FAIL

Döndürülen hata kodunda sorun gidermek için, şunu çalıştırın: curl host:portörn.

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

man curlÇıkış kodlarının tam listesi için bkz .


Ne yazık ki bu benim için çalışmıyor (en azından OS X'te bash üzerinde).
Mike Atlas

1
Özel bir hizmet. FWIW bu tür işler: curl $IP:$PORTverim: curl: (52) Empty reply from server(karşı curl: (7) Failed to connect) ama çok benzer nc, ben | grep Emptygibi biri gibi bu çıktı ifadeleri için bekleyemezsiniz (yeni satırlar veya acil çıkış eksikliği hakkında bir şey?). Hattınızın çıkış koduna dayalı bir koşullu olduğunu düşünüyorum, değil mi? El Cap'dayım; belki diğer sürümlerde veya işletim sistemlerinde başarısızlık durumu -1yerine 52?
Mike Atlas

Evet bunu yapardı. curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
Mike Atlas

Soru, açıkçası örneğin / dev / null
Arthur Tacca

@ArthurTacca Linux için Windows Alt Sistemini (WSL) her zaman kullanabilirsiniz.
kenorb

23

Basın Windows+ Rtipi cmdveEnter

Komut istemine yazın

telnet "machine name/ip" "port number"

Bağlantı noktası açık değilse bu mesaj görüntülenir:

"Connecting To "machine name"...Could not open connection to the host, on port "port number":

Aksi takdirde açılan porta girersiniz (boş ekran görüntülenir)


7
Telnet'in modern Windows sistemlerine varsayılan olarak yüklenmediğini unutmayın. Windows Özellikleri Ekle / Kaldır kontrol panelinden yüklemeniz gerekir.
Greg

1
@Greg veya telnet-online.net gibi çevrimiçi bir araç kullanma
oz

2
@oz true, dahili bir sunucunun durumunu kontrol etmezseniz
Greg


19

Nc komutunu kullan,

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

Telnet komutunu da kullanabilirsiniz

telnet <ip/host> port

4

nc veya 'netcat' de kullanılabilecek bir tarama moduna sahiptir.


3
Mac'te "nc -zv sunucusu bağlantı noktası aralığı"
Vijay Kumar

2

Sanırım bir Windows sürümü olan Hping ( http://www.hping.org/ ) 'i arıyorsunuz .

"Arayüz ping (8) unix komutundan esinlenildi, ancak hping sadece ICMP yankı isteklerini göndermekle kalmıyor. TCP, UDP, ICMP'yi destekliyor ..."

Bir TCP bağlantı noktasının (bir güvenlik duvarı tarafından olduğu gibi) bir yol boyunca nerede engellendiğini görmek istiyorsanız da çok kullanışlıdır, burada ICMP olmayabilir.


2

Bash'te, ilişkili sokete bir TCP bağlantısı açabilen sözde aygıt dosyalarını kullanabilirsiniz. Sözdizimi /dev/$tcp_udp/$host_ip/$port.

Memcached'in çalışıp çalışmadığını test etmek için basit bir örnek:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

Belirli bir web sitesinin erişilebilir olup olmadığını görmek için başka bir test:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

Daha fazla bilgi için, bkz. Gelişmiş Bash-Scripting Kılavuzu: Bölüm 29. /devve/proc .

İlgili: Uzak sistemdeki bir bağlantı noktasına SuperUser'da erişilebildiğini (telnet olmadan) test edin .

Daha fazla örnek için bkz: Bir bash kabuğunda TCP / UDP soketi nasıl açılır (makale).


1
Vay canına, bu dahi! Bunun sadece bash ile mümkün olduğunu bilmiyorum. Benim gibi sadece Windows'ta git bash yüklü olan ve başka bir hizmet yüklemek istemeyen insanlar için çok uygun.
dotslashlu
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.