Telnet dışında açık portları kontrol etmenin alternatifleri nelerdir?


24

Telnet VIA portunu test etmek için aşağıdakileri kullanabiliriz; Aşağıdaki örnekte 6667 numaralı bağlantı noktasını test ediyoruz:

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

Bazı makinelerde telnet kullanamadığımızdan (iç nedenlerle) telnet olarak portları kontrol etmenin alternatifleri nelerdir?


Perl bir seçenek midir?
Jeff Schaller

5
Bu "dahili nedenler", başka bir port tarama yazılımı kullanmanıza engel olabilir. Bir bankada çalışan ve sözleşmesinde feshedilen bir adamı biliyordum çünkü bilgisayarında bir nmap kopyası vardı. İşle ilgili amaçlar için kullanıyordu, ancak yasaklananlar listesindeydi, bu yüzden binadan dışarıya eşlik etti.
Roger Lipscombe

2
Perl bir seçenek midir? - YES
yael

2
Telnet'in karmaşık bir protokol olduğunu unutmayın. Yardımcı telnetprogram protokol davranışını komut satırında bir bağlantı noktası verilirse kapatır. Sonra netcat, sadece satır sonu tespiti ile aynı şekilde davranır .
rexkogitans

Port taramayla bile ipucu olmayan daha işletim sistemi agnostik bir soru, unix.stackexchange.com/questions/499694 .
JdeBP

Yanıtlar:


23

Bash Shell kullanıyorsanız, bir portun açık veya kapalı olup olmadığını kontrol etmek için özelliğini kullanabilirsiniz:

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

Sunucu 1 saniye sonra yanıt vermezse, zaman aşımına ulaşıldığını, arasındaki komutların 'kesildiğini ve hiçbir şeyin yazdırılmadığını unutmayın.


5
Belki de soru yerine host adını kullanmalısınız (kafka02) 127.0.0.1, ki bu sadece geridöngü ile çalışır gibi görünmesini sağlar.
Dmitry Grigoryev

1
(timeout 1 bash -c '</dev/tcp/www.google.com/444 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/nullbenim için hiçbir şey basmaz. (timeout 1 bash -c '</dev/tcp/www.google.com/444' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/nullbeklendiği gibi çalıştı (PORT KAPALI yazdırır). Konumunu not alın '.
telaşsız

Eğer bash olsun -c '</ dev / tcp / kafka01 / 6667'
yael

sonra yankı $? (0 ise bağlantı noktası açıksa)
yael 7:18

IIRC bu bash özelliği bir süre önce Debian'da devre dışı bırakılmıştı. Düzgün bir numara ama her zaman işe yaramaz.
AnonymousLurker

32

netcat bir seçenektir.

nc -zv kafka02 6667
  • -z = nc'yi, sadece herhangi bir veri göndermeden, dinleme telefonlarını kolayca taramaya ayarlar.
  • -v = ayrıntılı modu etkinleştirir

nc'den standart çıktı almak mümkün mü? çünkü bash
betiğimde

2
Belgeleri okuyun! Seçenekler olmadan ncçok benzer davranır telnet.
Henrik - Monica

evet ben belgeleri okudum ama -w flag zaman aşımı olarak
çalışmıyor

örnek - c -v -w 1 kafka01 6667 (zaman aşımına
uğramadık

nc -v -w 3 kafka01 6667 Ncat: Sürüm 6.40 ( nmap.org/ncat ) Ncat: 10.164.235.85:6667'ye bağlı. (Bu hala askıda)
yael

23

Altın standart şüphesizdir nmap( nmap.org ), ancak genellikle “en iyi sonuçlar” için kök gerektirir. Ancak, bağımsız ikili dosyalar kullanılabilir durumdadır ve yalnızca bozulmuş özelliklerle, ayrıcalıklı olmayan bir kullanıcı olarak çalıştırmak mümkündür. Örneğin, gizli bir syntarama ( -sS) yerine, standart bir TCP bağlantı taramasına ( -sT) geri döner . Bu, işlevsel olarak netcat'e eşdeğerdir, ancak sahip olduğu çok sayıdaki çok ana bilgisayarlı, artırılmış yeteneklerle.

Bir örnek:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

1
çoğu kuruluşta nmap bir tarama aracı olarak kabul edilir ve bir nmap uygun yetkilendirme olmadan kullanılamaz. Ayrıca eğer bir EC2 örneği ise, AWS'den de yetki alınması gerekir.
al mamun

4

Perl bir seçenek ise, IO::Socketbelirli bir ana bilgisayar ve bağlantı noktasıyla olan bağlantıyı test etmek için modülünü kullanabilirsiniz ; Aşağıdaki komut kodu TCP'yi protokol olarak kodlar (ki bu, hangi telnet'in kullandığıdır):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Kapalı bir porttan örnek çıktı:

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

Açık bir porttan örnek çıktı:

$ ./above-script kafka02 4200
Success!

2

Telnet yerine / dev / tcp ve / dev / udp aygıt dosyası kullanılabilir. Örnek: echo 0> /dev/tcp/103.64.35.86/6667. Ardından #echo $ kullanarak çıkış durumunu kontrol edin. . Çıkış durumu 0 ise, port açıktır. Çıkış durumu sıfır değilse, port kapatılır. Udp paketlerini kontrol etmek için echo 0> /dev/udp/103.64.35.86/6667 adresini kullanın.


redhat 7 / dev / altında, tcp yok
yael

ls / dev / tcp / ls: erişilemiyor / dev / tcp /: Böyle bir dosya veya dizin yok
yael 7:18

hangi işletim sistemi üzerinde test ediyorsunuz?
yael

@yael, ls iken / dev / tcp veya / dev / udp alamazsınız. kabuğunuzda aynı komutu deneyin ve sonucu alacaksınız. bu arada, sık kullanıyorum RHEL6,7
al mamun 7/18

0
ss -lt 

Bu kullanabileceğiniz başka bir komuttur.


Yalnızca yerel makine için çalışıyor, bu sorunun uzaktaki bir ana bilgisayarın açık bağlantı noktalarını kontrol etmekle ilgili olduğuna inanıyorum.
Alex Baranowski
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.