Apakah mungkin melakukan ping alamat: port?


212

Saya tidak ke jaringan, dan saya punya pertanyaan berikut yang berkaitan dengan perintah ping Linux .

Bisakah saya hanya ping alamat? Sebagai contoh:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

Atau bisakah saya juga melakukan ping alamat: port , misalnya: onofri.org:80 ?

Jika saya mencoba yang ini tidak berfungsi:

miner@raspberrypi ~ $ ping onofri.org:80
ping: unknown host onofri.org:80

Apakah mungkin ping sesuatu seperti address: port ? Jika mungkin, mengapa saya tidak mencoba apa yang berhasil?


8
Apa yang ingin Anda capai? Memverifikasi operasi layanan yang benar mengharuskan Anda untuk benar-benar meminta layanan dan mengevaluasi responsnya. Server web, bisa, misalnya, menerima koneksi Anda, tetapi mengembalikan kesalahan karena kesalahan konfigurasi.
Daniel B

5
Itulah bagian yang saya sukai dari Telnet. Anda dapat terhubung ke server web, dan ketik GET /index.html HTTP\1.1dan lihat 200 respons (atau kode kesalahan) bersama dengan markup yang dihasilkan.
Frank Thomas

7
@ FrankThomas HTTP\1.1? Benarkah?
glglgl

5
@Navin Maybe HTTP/1.1...
glglgl

3
@glglgl; apa? Anda tidak pernah meletakkan retasan ke tempat tebasan harus pergi? tetapi Anda benar, itu harus tebas.
Frank Thomas

Jawaban:


20

Anda dapat menggunakan Paping , pengujian port TCP lintas-platform, meniru fungsi ping (port ping)

(lihat juga Github karena code.google.com telah disusutkan)

paping -p 80 google.com

8
Beberapa penjelasan tentang apa yang dilakukan program ini akan sangat membantu.
David Schwartz

16
bagi siapa pun yang menemukan jawaban ini, seperti yang saya lakukan, hanya untuk menemukan paping tidak ada dalam repositori dan merupakan kode kuno yang bahkan tidak dapat dikompilasi pada ARM - gulir ke bawah lebih jauh ke jawaban 'hping'. Ini adalah drop-in yang sempurna untuk ping ketika Anda perlu menguji port dan mudah diakses di berbagai repositori (mis. Ubuntu, Arch) termasuk ARM.
Markus

Bagaimana saya bisa menginstal paping? Saya telah mengunjungi repo tetapi tidak ada rilis. Ah, tidak masalah .. kode google tidak dapat diakses untuk saya saat itu.
Shayan

310

Port adalah konsep UDP dan TCP . Pesan ping secara teknis disebut sebagai ICMP Echo Request dan ICMP Echo Reply yang merupakan bagian dari ICMP . ICMP, TCP, dan UDP adalah "saudara"; mereka tidak didasarkan pada satu sama lain, tetapi tiga protokol terpisah yang berjalan di atas IP.

Karena itu Anda tidak dapat pingmemiliki port. Apa yang dapat Anda lakukan, adalah menggunakan port scanner like nmap.

nmap -p 80 onofri.org

Anda juga dapat menggunakan telnet onofri.org 80, seperti yang disarankan dalam salah satu jawaban lain (Ini akan memberikan kesalahan jika port ditutup atau difilter).


22
+1 Anda memahaminya dengan benar. ICMP dibangun di atas IP, yang memiliki konsep alamat IP tetapi tidak port. TCP dan UDP juga ada di atas IP, dan protokol itulah yang menambahkan "port". ICMP, TCP, dan UDP semuanya pada "level" yang sama dalam hal protokol yang mereka bawa.
Jason C

14
+1. Banyak, banyak orang berpikir bahwa jika mereka tidak dapat melakukan ping sesuatu mereka tidak dapat terhubung ke sana ... tetapi seperti yang Anda katakan, ICMP berbeda dari TCP dan UDP: jika Anda berniat untuk melayani, katakanlah, halaman web di TCP 80, daripada Anda hanya perlu membuka TCP 80 pada firewall, tidak ada yang lain (jadi Ping ke IP yang sama dapat (... harus!) diblokir, misalnya)
Olivier Dulac

6
Hanya untuk menjaga agar informasi tetap akurat, ICMP bukanlah protokol lapisan transport seperti TCP atau UDP. Seperti sejumlah protokol, protokol ini tidak sepenuhnya sesuai dengan model konseptual jaringan, tetapi umumnya dianggap sebagai protokol lapisan jaringan / internet seperti halnya IP. Kadang-kadang juga disebut sebagai protokol L3.5.
YPelajari

2
@ BenjiWiebe, setuju, tapi sekali lagi, untuk keakuratan pernyataan harus dibuat itulah sebabnya saya menambahkannya. Sejauh ini yang dikatakan adalah ICMP, TCP, dan UDP saling terkait. Komentar dengan suara tertinggi bahkan mengatakan bahwa mereka semua berada pada "level" yang sama. Meskipun ini tidak membuat perbedaan bagi pengguna rata-rata, ada banyak pengguna non-rata yang mengunjungi situs ini.
YPelajari

4
@OlivierDulac Saya tidak tahu apakah Anda harus memblokirnya. Sebagian besar server web yang saya kenal membiarkannya terbuka. ICMP membuat internet berputar. Mengapa Anda ingin orang berpikir mereka tidak dapat menghubungi Anda jika mereka bisa?
Cruncher

86

Saya menggunakan Telnet , karena dibangun ke banyak platform tanpa unduhan tambahan.

Cukup gunakan perintah telnet untuk terhubung ke port yang ingin Anda uji. Jika Anda mendapatkan pesan di bawah ini, atau pesan dari layanan itu sendiri, maka port tersebut hidup.

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Jika Anda mengetahui urutan perintah untuk layanan yang Anda sambungkan, Anda dapat mengetikkan perintah ( HTTP / FTP GET misalnya) dan amati respons dan keluaran di terminal. Ini sangat berguna untuk menguji layanan itu sendiri, karena itu akan menunjukkan kepada Anda informasi kesalahan yang dikirim ke klien, seperti kesalahan HTTP 500.

Jika Anda mendapat pesan bahwa koneksi ditolak, port ditutup.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8
Juga jika layar menjadi hitam itu pertanda Anda terhubung juga.
Tensigh

Saran yang bagus. Saya biasa menggunakan ini untuk menguji apakah server web aktif ketika browser web bukanlah pilihan yang mudah.
Brandon

@Brandon suka ketika mengisap mesin dev ^. ^
Cruncher

Alat pengembang di browser jauh lebih mudah, karena mereka masih akan mengirim semua header permintaan HTTP yang tepat tetapi Anda dapat memeriksa respons HTTP penuh. Kemudian lagi jika Anda ingin menyesuaikan permintaan juga maka telnet adalah cara untuk pergi.
Lightness Races in Orbit

Saya pikir semua jawaban di sini ketinggalan informasi yang paling penting. Secara teknis, tidakkah mungkin melakukan "ping" port sebagai berikut? Anda dapat membuat koneksi TCP / UDP, dan Anda menghitung berapa milidetik untuk membuat koneksi itu.
David

48

Ya, gunakan HPing untuk melakukan itu:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Perhatikan bahwa ini membutuhkan hak akses root (atau kemampuan SELinux) untuk membuat paket IP mentah, seperti halnya ping (yang kemungkinan besar suid pada sistem Anda).


3
Saya berharap ini adalah "jawaban yang diterima". Hping mudah ditemukan di beberapa repo, tidak seperti paping yang merupakan kode crufty kuno yang tidak dikompilasi pada ARM. Juga tidak seperti NMAP, haping mengembalikan kode status yang mudah diuji dari skrip shell, jadi itu pengganti yang sempurna untuk tempat Anda menggunakan ping. Terima kasih atas jawaban ini, sayang sekali saya tidak gulir ke bawah cukup jauh untuk melihatnya dan harus menemukannya di situs web lain.
Markus

Saya tidak dapat menginstal hping di ubuntu .. Paket tidak ditemukan .. Tapi saya sudah menemukan. hping3Apakah sama dengan hping3? @ d33tah
Shayan

Ok saya mencoba hping3dan ping semua port .. Tidak masalah ditutup atau dibuka .. Bagaimana saya bisa tahu jika port ditutup atau terbuka?
Shayan

46

Anda dapat menggunakan netcat untuk terhubung ke port tertentu untuk melihat apakah Anda mendapatkan koneksi. Bendera -v akan meningkatkan verbositas untuk menunjukkan apakah port terbuka atau tertutup. Bendera -z akan menyebabkan netcat berhenti setelah memiliki koneksi. Anda kemudian dapat menggunakan kode keluar melalui $? untuk melihat apakah koneksi dibuat atau tidak.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Selain itu, Anda dapat menggunakan mtr dengan flag -T untuk tcp dan flag -P untuk menentukan port. Ini akan melakukan sesuatu yang mirip dengan traceroute melalui TCP, bukan hanya ICMP. Ini mungkin berlebihan, namun.

sigh saya harus mengedit untuk menambahkan bit ini, karena kita tidak dapat memasukkan kode dalam komentar Knoppix mungkin sedang melakukan sesuatu yang berbeda dengan versi netcat-nya, tapi inilah yang saya dapatkan dari Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

Masalahnya adalah jika Anda mencobanya nc -z www.google.com 8000 bisa memakan waktu lama - 5 detik plus. Jika saya melakukannya -w 1maka dibutuhkan 5 detik. Jika saya melakukannya -w 3maka dibutuhkan 3 kali lebih lama .. 15 berkedip kursor, 15 detik. -w 1dimaksudkan menjadi satu detik tetapi diuji di cygwin.,. 5 detik. Ini sangat cepat ketika ada server di port tetapi agak lambat ketika tidak ada.
barlop

mengutuk tidak ada baris baru di komentar ... Itu tampaknya menjadi bug dengan cygwin. Pengujian dengan linux Mint menunjukkan penundaan berapa detik yang ditentukan. jalankan ini untuk menguji: date; nc-zw5 www.google.com 8000; date
Falsenames

Saya juga meningkatkan @BenjiWiebe dengan permintaan nmap. nc lebih mudah untuk dimasukkan ke dalam skrip, tetapi jauh lebih mudah untuk menggunakan nmap secara visual.
Nama samaran

Mencoba di knoppix. nc -zv -w 1 www.google.com Bagaimana Anda membuatnya hanya mencoba sekali? Ketika saya mencobanya ya -w 1 bekerja tetapi setiap detik ia mencoba lagi sampai saya melakukan Ctrl-C.
barlop

Tidak yakin apa yang dilakukan versi Knoppix dari 'nc -zv -w 1 www.google.com 80'. Itu berfungsi dengan baik pada sistem saya, menanyakan sekali dan menjatuhkan seperti -z yang seharusnya dilakukan. Juga, tanpa nomor port yang ditentukan, tambang gagal mengatakan tidak ada port yang ditentukan.
Nama samaran

18

Anda juga dapat menggunakan nping(bagian dari nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds

6
nping --tcp -p 80 localhost
K-Gun

Saya menguji port APAPUN, (port yang tidak terbuka) dan saya masih menerima dua jabat tangan sepanjang waktu ...
Shayan

8

Anda bisa melakukannya di shell dengan Python sebagai liner yang tidak terlalu pendek:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN

7

Hanya untuk referensi, ingin berbagi posting oleh Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# komentar-920398

Dia mendaftar berbagai cara, beberapa di antaranya sudah diposting di sini. Tetapi yang paling mengejutkan bagi saya adalah bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

Atau versi super sederhana: hanya melihat output dari pola perintah berikut:

echo >/dev/{tcp|udp}/{host}/{port}

Berguna saat bekerja dengan wadah buruh pelabuhan acak.


looking at the output- hanya memeriksa kode pengembalian yang $?dapat membantu. Juga tergantung pada port yang ditutup, mungkin batas waktu dapat dikonfigurasi di mana saja ...
vp_arth

Solusi ini terlihat rapi, tetapi echo >/dev/tcp/{hostname}/{portnumber}tidak selesai ketika port ditutup. Dan echo >/dev/tcp/{hostname}/{portnumber}tidak menunjukkan apa-apa meskipun port terbuka dan saya bisa melihatnya di browser.
miguelmorin

Hai mmorin, OS apa yang Anda gunakan? Di Ubuntu berperilaku seperti yang diharapkan: jika port ditutup, saya mengerti Connection refused. Jika tidak, ia keluar tanpa menunjukkan apa pun dan echo $?menunjukkan kode keluar1
Jacek

3

Saya menambahkan watchalat di sini:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

3

Sederhana dengan nmap

contoh:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Untuk informasi lebih lanjut, lihat ini:

ketikkan baris perintah ini: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/


1

Apakah Anda mencoba menguji komunikasi atau mendapatkan respons dari port 80 pada simpul itu? PINGakan mencoba menjalin komunikasi ke host tertentu melalui ICMP yang tidak ada hubungannya dengan port.

Alih-alih, coba http://nmap.org/ untuk memeriksa info port dan menguji komunikasi:

nmap -v -p 80 onofri.org

1
Tidak yakin versi nmap yang Anda gunakan. Di sistem saya, ini membutuhkan -v dan -p untuk dipisahkan seperti 'nmap -v -p 80 onofri.org'. Ini karena -v dan -vv berarti hal yang berbeda, -v mengambil lebih banyak v sebagai argumen.
Nama samaran
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.