Ping Port Tertentu


671

Cek saja kewarasan cepat di sini.

Bisakah Anda melakukan ping port tertentu dari mesin, dan jika demikian, dapatkah Anda memberikan contoh?

Saya mencari sesuatu seperti ping ip address portNum.


1
untuk windows pertanyaan ini dapat diperiksa
npocmaka

Jawaban:


720

Anda tidak dapat melakukan ping port, karena Ping menggunakan ICMP yang tidak memiliki konsep port. Port milik protokol transport layer seperti TCP dan UDP. Namun, Anda bisa menggunakan nmap untuk melihat apakah port terbuka atau tidak

nmap -p 80 example.com

Sunting: Seperti yang disebutkan flokra, nmap lebih dari sekadar ping-for-ports-thingy. Ini adalah pengawas keamanan dan peretas sahabat terbaik dan dilengkapi dengan banyak opsi keren. Periksa dokumen untuk semua kemungkinan bendera.


15
Anda mungkin ingin menambahkan -PNuntuk melewati penemuan host yang biasanya dilakukan nmap sebelum menguji port yang diberikan.
flokra

27
Untuk menyelamatkan beberapa orang dari beberapa masalah: nmap / can / diinstal pada windows dari tautan (atau google nmap windows), TETAPI itu tidak berfungsi pada VPN. PaPing tampaknya tidak dapat memindai berbagai alamat. Saya telah memposting skrip Python di bawah ini yang akan berfungsi melalui VPN untuk memindai berbagai port pada berbagai alamat.

23
Untuk yang lain: nmap tidak ada di Mac OS X, Anda dapat menginstal nmap melalui homebrew brew install nmapatau MacPorts.
Highway of Life

17
nping lebih cocok untuk tugas ini daripada nmap. nping adalah bagian dari distribusi nmap.
CMCDragonkai

6
Mac OSX memiliki 'Network Utility' yang memiliki tab port scanner
Shanimal

192

Buka sesi telnet ke port tertentu, misalnya:

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

Untuk menutup sesi Anda, tekan Ctrl+ ].


23
netcatbekerja juga bagus dan kurang verbose.
petrus

3
Telnet berfungsi dengan baik untuk ini jika port adalah port TCP.
Falcon Momot

6
netcat juga bekerja dengan UDP (nc -u)
Tsvetomir Dimitrov

1
Untuk pengguna Mac - netcatsekarang built-in MacOS HighSierra, di mana telnet dapat diinstal dari HomeBrewbrew install telnet
sandiejat

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

10
Gunakan dengan timesuka di time nc -vz www.example.com 80dan Anda akan memiliki semacam RTT juga.
xebeche

3
Solusi tunggal yang berfungsi di Amazon EC2 tanpa instalasi apa pun.
Masadow

apa -z? ncat 6.40 pada rhel7 memberikan opsi yang tidak diketahui
Tagar

@Tagar sesuai dengan bantuan dalam versi Ubuntu, -z adalah mode Zero-I / O, yang digunakan untuk memindai.
Ben Mordecai

88

Jika Anda berada di instalasi windows dengan powershell v4 atau yang lebih baru, Anda dapat menggunakan modul powershell test-netconnection:

Test-NetConnection <host> -port <port>

Contoh: Test-NetConnection example.com -port 80

Cmdlet ini juga memiliki alias tnc. Misalnyatnc example.com -port 80


80

Anda dapat menggunakan PaPing:

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
Atau alih-alih menggunakan kertas, Anda bisa menggunakan cryping yang sudah ada jauh lebih lama dan mendukung ping beberapa layanan serta porta.

Apakah ini dapat digunakan untuk melakukan ping port apa saja atau hanya 80?
Luke Puplett

@LukePuplett baru saja mengubah angka 80 pada contoh. Jalankan dengan mengetikkan paping.exe <hostname / IP> -p <portnumber> -c <jumlah upaya>
David Costa

Ini sangat bagus. gunakan -c *untuk paping konstan (?).
user2924019


26

Coba curlperintah, seperti:

$ curl host:port

Sebagai contoh:

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

Perintah di atas akan mengembalikan Gagal pada kode status keluar non-nol. Dalam beberapa kasus tertentu, seperti respons kosong atau cacat (lihat man curl), Anda mungkin ingin menangani kode keluar tertentu sebagai berhasil, jadi silakan periksa posting ini untuk penjelasan lebih rinci.


3
Saya suka ini karena curlhadir secara default pada CentOS, jadi saya tidak perlu menginstal apa pun.
bdemarest

curl bekerja pada Raspberry Pi (distro Raspian)
John M

1
Sejauh ini, ini adalah solusi paling elegan dan universal. Saya men-tweak sedikit untuk membuatnya oneliner rapi: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

Saya menemukan solusi yang lebih sederhana menggunakan PsPing:

psping 192.168.2.2:5000

Itu bagian dari Windows Sysinternals .

PsPing mengimplementasikan fungsionalitas Ping, ping TCP, latensi dan pengukuran bandwidth.


1
Juga PsPing berasal dari tim Microsoft SysInternal sehingga mungkin dianggap sedikit lebih sah ketika berhadapan dengan orang-orang yang berorientasi Microsoft lainnya. (Dan memiliki fungsionalitas yang lebih baik daripada PortQry yang sangat lama)
martyvis

PSPing memiliki keuntungan menyediakan pengukuran latensi saat menggunakan port khusus, sesuatu yang tidak dapat dilakukan Test-NetConnection (hanya melaporkan waktu respons ICMP).
Jeff Miles

14

Di Linux Anda dapat menggunakan hping tetapi menggunakan TCP, bukan ICMP.

hping example.com -S -V -p 80

1
hping (hping3 di ubuntu saya) sangat bagus. Ini mengulangi pemeriksaan seperti ping secara berkala, dan tidak seperti banyak alat yang disarankan di sini. Ini juga menguji apakah paket melewati, dan apakah port terbuka. Jika terbuka Anda dapatkan flags=SA(yaitu SYN ACK), dan jika ditutup Anda dapatkan flags=SR(yaitu SYN RST). Perhatikan bahwa Anda mungkin tidak perlu -Vbendera di sini, tetapi Anda perlu sudo / root untuk menjalankan hping.
mc0e

Luar biasa! Tidak seperti banyak jawaban lain, ini melaporkan RTT suka latensi suka pingdan ping sampai berhenti.
Edward Anderson

11

Ping sangat spesifik tetapi jika Anda ingin memeriksa apakah port terbuka atau tidak, dan menjalankan kotak Windows maka PortQry adalah teman Anda.

Saya hanya menggunakannya untuk menguji Pengontrol Domain untuk masalah konektivitas, tapi itu berhasil untuk itu, jadi seharusnya bekerja untuk Anda.


1
PortQry awalnya dirilis pada tahun 1999/2000 oleh tim MS Exchange tetapi versi MS terbaru tampaknya menghambatnya dengan menghilangkan kemampuan untuk menanyakan port jarak jauh (kesehatan & keselamatan).
Luke Puplett

8

Berikut adalah aplikasi konsol .NET yang cepat dan kotor:

    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

Tidak.

Tidak ada jaminan bahwa layanan yang berjalan di port memahami ping. Ini juga membuka pertanyaan tentang "rasa" port apa yang ingin Anda ping, TCP atau UDP? Karena ping "protokol" tidak menggunakan keduanya (ping diimplementasikan menggunakan ICMP ), itu tidak masuk akal.


4

Saya cukup yakin bahwa pemeriksaan Nagios check_tcp melakukan apa yang Anda inginkan. Mereka dapat ditemukan di sini dan meskipun dirancang untuk digunakan dalam konteks Nagios, mereka semua adalah program mandiri.

$ ./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

Ini adalah satu - satunya solusi yang berfungsi untuk VPN dengan mesin klien menjadi Windows Vista atau Windows 7 , karena jawaban yang terdaftar lainnya tidak berfungsi. Jawaban ini sebelumnya dihapus dan seharusnya tidak, karena ini adalah satu-satunya solusi untuk kasus umum dunia nyata. Karena tidak ada banding yang tersedia untuk penghapusan, saya mengepos ulang untuk menyelamatkan orang lain dari frustrasi yang saya miliki ketika mencoba menggunakan jawaban lain.

Contoh di bawah ini menemukan IP mana pada VPN yang memiliki VNC / port 5900 terbuka dengan klien yang berjalan pada Windows 7.

Skrip Python (v2.6.6) pendek untuk memindai daftar IP dan Port yang diberikan:

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."

Hasilnya tampak seperti:

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.

Keempat variabel di atas perlu diubah agar sesuai dengan batas waktu, jaringan, host, dan port apa pun yang diperlukan. 5,0 detik pada VPN saya sepertinya cukup untuk bekerja dengan baik secara konsisten, sedikit yang tidak (selalu) memberikan hasil yang akurat. Di jaringan lokal saya, 0,5 lebih dari cukup.


2
Bekerja dengan baik pada Win 7 XP Pro client / Win Server 2008 R2 untuk mendiagnosis port tertutup. (Saya harus menggunakan ambang batas waktu 30 detik tetapi itu mungkin menjadi masalah dengan lingkungan server tertentu bukan masalah dengan kode ini)
David Zemens


1

Di Bash shell, Anda dapat menggunakan file perangkat TCP pseudo , misalnya:

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

Ini adalah versi yang menerapkan batas waktu 1 detik:

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

0

Jika Anda menjalankan sistem operasi * nix, coba instal dan gunakan "zenmap", ini adalah GUI untuk nmap dan memiliki beberapa profil pemindaian yang berguna yang sangat membantu pengguna baru.


Zenmap juga tersedia untuk windows.
Nick Young
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.