Belirli Bir Bağlantı Noktasını Pingle


671

Sadece hızlı bir sağlık kontrolü burada.

Bir makinenin belirli bir portuna ping atıp, varsa bir örnek verebilir misiniz?

Gibi bir şey arıyorum ping ip address portNum.


1
Windows için bu soru kontrol edilebilir
npocmaka

Yanıtlar:


720

Ping, bağlantı noktaları kavramına sahip olmayan ICMP'yi kullandığı için bağlantı noktalarına ping yapamazsınız . Bağlantı noktaları, TCP ve UDP gibi taşıma katmanı protokollerine aittir . Ancak, bağlantı noktalarının açık olup olmadığını görmek için nmap kullanabilirsiniz.

nmap -p 80 example.com

Düzenleme: flokra'nın da belirttiği gibi, nmap sadece portlar için bir şeylerden ibaret değildir. Güvenlik denetçileri ve bilgisayar korsanlarının en iyi arkadaşıdır ve bir sürü harika seçeneğe sahiptir. Tüm olası bayraklar için doktora göz atın.


15
-PNNmap genellikle verilen bağlantı noktasını sınamadan önce yaptığı gibi ana bilgisayar keşif atlama işlemini eklemek isteyebilirsiniz .
flokra

27
Bazı insanlara biraz sıkıntıdan kurtulmak için: nmap / can / linkten pencerelere kurulabilir (veya google nmap windows), fakat VPN üzerinden çalışmaz. PaPing bir adres aralığını tarayamadı gibi görünüyordu. Aşağıda, bir adres aralığında bir dizi bağlantı noktasını taramak için VPN üzerinden çalışacak olan Python komut dosyasını gönderdim.

23
Diğerleri için: nmap Mac OS X'te mevcut değil, nmap'ı homebrew brew install nmapveya MacPorts üzerinden yükleyebilirsiniz .
Hayat Yolu

17
nping bu görev için nmap'den daha uygundur. nping, nmap dağılımının bir parçasıdır.
CMCDragonkai

6
Mac OSX, bir port tarayıcı sekmesine sahip olan 'Ağ Yardımcı Programı'na sahiptir
Shanimal,

192

Belirli bir bağlantı noktasına bir telnet oturumu açın, örneğin:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

Oturumunuzu kapatmak için Ctrl+ tuşuna basın ].


23
netcatAyrıca harika çalışıyor ve daha az ayrıntılı.
petrus 09:11

3
Telnet bunun için iyi çalışır, port bir TCP port ise.
Falcon Momot

6
netcat UDP ile de çalışıyor (nc -u)
Tsvetomir Dimitrov

1
Mac kullanıcıları için - netcatartık yerleşik MacOS HighSierra, telnet HomeBrew'den kurulabilirbrew install telnet
sandiejat

98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!

10
Ile timebenzer kullanın time nc -vz www.example.com 80ve siz de bir tür RTT olacaktır.
xebeche

3
Amazon EC2 örnekleri üzerinde kurulum yapmadan çalışan tek çözüm.
Masadow

-z nedir? nhel 6.40 rhel7 tarihinde bilinmeyen bir seçenek sunar
Tagar

@ Ubuntu versiyonundaki yardıma göre, -z, -z, tarama için kullanılan Sıfır-I / O modudur.
Ben Mordecai

88

Powershell v4 veya daha yenisiyle bir windows kurulumundaysanız, test netconnection powershell modülünü kullanabilirsiniz:

Test-NetConnection <host> -port <port>

Örnek: Test-NetConnection example.com -port 80

Bu cmdlet'in ayrıca diğer adı da vardır tnc. Örneğintnc example.com -port 80


80

PaPing'i kullanabilirsiniz:

http://code.google.com/p/paping

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms

1
Ya da bir araya gelmek yerine, daha uzun zamandır devam eden ve bazı hizmetlerin yanı sıra bağlantı noktalarının da ping'lenmesini destekleyen ağlamayı kullanabilirsiniz.

Bu herhangi bir limana ping atmak için kullanılabilir mi, yoksa sadece 80 mi?
Luke Puplett

@LukePuplett sadece örnekteki 80 sayısını değiştirdi. Paping.exe yazarak çalıştırın <hostname / IP> -p <portnumber> -c <deneme sayısı>
David Costa

Bu harika çalışıyor. -c *sürekli paping için kullanın (?).
user2924019


26

curlKomutu dene , şöyle:

$ curl host:port

Örneğin:

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

Yukarıdaki komut geri dönecektir Sıfır olmayan bir çıkış durumu kodlarında başarısız . Boş veya hatalı biçimlendirilmiş yanıt gibi bazı özel durumlarda (bkz. man curl), Belirli çıkış kodlarını başarılı şekilde ele almak isteyebilirsiniz, bu nedenle lütfen daha ayrıntılı bir açıklama için bu postayı kontrol edin .


3
Bunu sevdim çünkü curlCentOS'ta varsayılan olarak mevcut, bu yüzden hiçbir şey yüklemem gerekmiyor.
kaba

curl bir Ahududu Pi (distro Raspian) üzerinde çalıştı
John M

1
Bu, bugüne kadarki en zarif ve evrensel çözümdür. Temiz bir oneliner yapmak için hafifçe tweaked:IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
Lefty G Balogh

21

PsPing kullanarak daha basit bir çözüm buldum:

psping 192.168.2.2:5000

Windows Sysinternals'ın bir parçası .

PsPing, Ping işlevi, TCP ping, gecikme süresi ve bant genişliği ölçümü uygular.


1
Ayrıca PsPing, Microsoft SysInternal ekibinden geliyor, bu nedenle Microsoft odaklı diğer insanlarla çalışırken biraz daha meşru sayılabilir. (Ve çok eski
PortQry'den

PSPing, özel bir bağlantı noktası kullanırken Test-NetConnection'ın yapamayacağı bir şey kullanırken gecikme ölçümü sağlama avantajına sahiptir (yalnızca ICMP yanıt süresini bildirir).
Jeff Miles

14

Linux'ta hping kullanabilirsiniz, ancak ICMP yerine TCP kullanır.

hping example.com -S -V -p 80

1
(benim ubuntu içinde hping3) hping mükemmel. Bu, ping'in yaptığı gibi probu periyodik olarak tekrarlar ve burada önerilen araçların aksine. Aynı zamanda paketin geçip geçmediğini ve portun açık olup olmadığını test eder. flags=SAAçıksa, alırsınız (yani, SYN ACK) ve kapalıysa, alırsınız flags=SR(örneğin, SYN RST). -VBuradaki bayraklara muhtemelen ihtiyacınız olmadığını , ancak hping'i çalıştırmak için sudo / root uygulamasına ihtiyacınız olduğunu unutmayın.
mc0e

Mükemmel! Diğer birçok cevaptan farklı olarak, bu RTT gecikmesini sever pingve durdurulana kadar ping bildirir .
Edward Anderson,

11

Ping çok özeldir ancak bir portun açık olup olmadığını ve bir Windows kutusu çalıştırıp kullanmadığını kontrol etmek istiyorsanız PortQry arkadaşınızdır.

Yalnızca Bağlantı sorunları için Etki Alanı Denetleyicilerini test etmek için kullandım, ancak bunun için bir tedavi çalıştı, bu yüzden sizin için çalışmalı.


1
PortQry ilk olarak 1999 / 2000'de MS Exchange ekibi tarafından piyasaya sürüldü, ancak MS'in son sürümünün uzaktaki portları sorgulama yeteneğini kaldırarak engelli göründüğü görülüyor (sağlık ve güvenlik).
Luke Puplett

8

İşte hızlı ve kirli bir .NET konsol uygulaması:

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }

5

Hayır.

Limanda çalışan servisin ping'i anlaması garantisi yoktur. Ayrıca ping, TCP veya UDP'ye bağlantı kurmak istediğiniz bağlantı noktasının "lezzetinin" sorusunu açar. Ping "protokolü" her ikisini de kullanmadığından (ping ICMP kullanılarak uygulanır ), pek bir anlamı yoktur.


4

Nagios check_tcp probunun istediğinizi yaptığından eminim. Burada bulunabilirler ve Nagios bağlamında kullanılmak üzere tasarlanmış olsalar da, hepsi bağımsız programlardır.

$ ./check_tcp -H host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000

4

Bu, listelenen yanıtların çalışmadığı için VPN için çalışan makinenin Windows Vista veya Windows 7 olmasıyla çalışan tek çözümdür . Bu cevap daha önce silinmişti ve olmamalıydı, çünkü bu gerçek dünyadaki ortak bir durum için tek çözümdü. Silme işlemi için temyiz başvurusu bulunmadığından, diğer cevapları kullanmaya çalışırken yaşadığım sıkıntıyı diğerlerinden kurtarmak için tekrar gönderiyorum.

Aşağıdaki örnek, VPN'de VNC / port 5900 olan IP'lerin Windows 7'de çalışan istemci ile açıldığını göstermektedir.

Belirli bir IP ve Bağlantı Noktası listesini taramak için kısa bir Python (v2.6.6) komut dosyası:

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        elif ( 10035 == result ):
            #do nothing, was a timeout, probably host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

Sonuçlar şuna benziyordu:

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

En üstteki dört değişkenin, zaman aşımına, ağa, ana makinelere ve gereken bağlantı noktalarına uygun olacak şekilde değiştirilmesi gerekir. VPN'imdeki 5.0 saniye, tutarlı bir şekilde düzgün çalışması için yeterliydi, daha az kesin sonuç vermedi. Yerel ağımda, 0.5, fazlasıyla yeterliydi.


2
Kapalı portu teşhis etmek için Win 7 XP Pro istemcisi / Win Server 2008 R2'de mükemmel çalışır. (30 saniyelik bir zaman aşımı eşiği kullanmak zorunda kaldım, ancak bu kod belirli bir sunucu ortamıyla ilgili bir sorun olabilir)
David Zemens


1

Bash kabuğunda, örneğin TCP sahte aygıt dosyasını kullanabilirsiniz :

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

1 saniyelik zaman aşımını uygulayan sürüm:

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed

0

Bir * nix işletim sistemi kullanıyorsanız, "zenmap" uygulamasını kurmayı ve kullanmayı deneyin, nmap için bir GUI'dir ve yeni kullanıcıya çok yardımcı olan birkaç yararlı tarama profiline sahiptir.


Zenmap da pencereler için kullanılabilir.
Nick Young,
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.