題 是否可以ping一個地址:端口?


我沒有進入網絡,我有以下與Linux相關的問題  命令。

我可以只ping一個地址嗎?例如:

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

或者我也可以ping一下 地址:端口, 例如: onofri.org:80

如果我嘗試這個它不起作用:

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

是否有可能像ping一樣 地址:端口?如果有可能,為什麼我嘗試不工作呢?


198
2018-06-16 18:17


起源


你想達到什麼目的?驗證正確的服務操作需要您實際查詢服務並評估響應。例如,Web服務器可以接受您的連接,但由於配置錯誤而返回錯誤。 - Daniel B
這是我喜歡的Telnet的一部分。您可以連接到網絡服務器,然後輸入 GET /index.html HTTP\1.1 並查看200響應(或錯誤代碼)以及結果標記。 - Frank Thomas
@FrankThomas HTTP\1.1?真? - glglgl
@Navin也許吧 HTTP/1.1... - glglgl
@glglgl;什麼?你永遠不會把斜線放在哪裡?但你是對的,應該是斜線。 - Frank Thomas


答案:


您可以使用 耙平,一個跨平台的TCP端口測試,模擬ping的功能(端口ping)

(也可以看看 Github上 因為code.google.com已被折舊)

paping -p 80 google.com

19
2018-01-21 08:02



對該程序所做的一些解釋會有所幫助。 - David Schwartz
對於任何找到這個答案的人,就像我一樣,只發現paping不在任何存儲庫中,並且是古老的代碼甚至不能在ARM上編譯 - 向下滾動到'hping'答案。當您需要測試端口時,它是ping的完美替代,並且可以在包括ARM在內的各種存儲庫(即Ubuntu,Arch)中輕鬆訪問。 - Mark


港口是一個概念 UDP 和 TCP。 Ping消息在技術上稱為 ICMP回應請求 和 ICMP Echo回复 這是其中的一部分 ICMP。 ICMP,TCP和UDP是“兄弟姐妹”;它們不是基於彼此,而是三個獨立的協議,運行在IP之上。

所以你做不到 ping 一個港口。你是什​​麼 能夠 做,是使用像端口掃描儀 nmap

nmap -p 80 onofri.org

你也可以使用 telnet onofri.org 80,如其他一個答案中所建議的(如果端口關閉或過濾,則會出錯)。


300
2018-06-16 18:19



+1你明白了。 ICMP建立在IP之上,它具有IP地址但不是端口的概念。 TCP和UDP也在IP之上,並且是那些添加“端口”的協議。 ICMP,TCP和UDP在它們所承載的協議方面都處於相同的“級別”。 - Jason C
+1。許多人認為,如果他們無法ping通他們無法連接的東西...但正如你所說,ICMP與TCP和UDP不同:如果你打算服務,比如TCP 80上的網頁,你只需要在防火牆上打開TCP 80,沒有別的東西(所以Ping到同一個IP可以(......應該!)被阻止,例如) - Olivier Dulac
為了保持信息準確,ICMP不是TCP或UDP等傳輸層協議。像許多協議一樣,它並不完全適合網絡概念模型,但它通常被認為是網絡/互聯網層協議,就像IP一樣。它有時也被稱為L3.5協議。 - YLearn
@BenjiWiebe,同意了,但同樣,為了準確,我應該做出聲明,這就是我添加它的原因。到目前為止所說的只是ICMP,TCP和UDP是相關的。評論最高的評論甚至可以說它們都處於同一“水平”。雖然這對普通用戶沒有任何影響,但仍有大量非平均用戶訪問此網站。 - YLearn
@OlivierDulac我不知道你是不是 應該 阻止它。我知道的大多數網絡服務器都是開放的。 ICMP使互聯網四處走動。你為什麼要讓人們認為如果可以的話他們無法聯繫到你? - Cruncher


我用 遠程登錄,因為它內置到許多平台,沒有額外的下載。

只需使用telnet命令連接到要測試的端口即可。如果您收到以下消息,或者來自服務本身的消息,則端口處於活動狀態。

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

如果您知道要連接的服務的命令序列,則可以鍵入命令(HTTP / FTP GET 例如)並觀察終端的響應和輸出。這對於測試服務本身非常有用,因為它會向您顯示發送到客戶端的錯誤信息,例如HTTP 500錯誤。

如果收到連接被拒絕的消息,則關閉端口。

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

79
2018-06-16 18:24



此外,如果屏幕變為全黑,那麼這也是您連接的標誌。 - Tensigh
優秀的建議。我以前用這個來測試Web服務器是不是一個Web瀏覽器不是一個簡單的選項。 - Brandon
@Brandon喜歡sshing到dev機器^。^ - Cruncher
瀏覽器中的開發人員工具要容易得多,因為他們仍會發送所有正確的HTTP請求標頭,但您可以檢查完整的HTTP響應。如果你想再定制請求,那麼再次使用telnet是可行的方法。 - Lightness Races in Orbit
我認為這裡的所有答案都錯過了最重要的信息。從技術上講,是不是可以按如下方式“ping”端口?您可以建立TCP / UDP連接,併計算建立該連接所花費的毫秒數。 - David


您可以使用netcat連接到特定端口以查看是否獲得連接。 -v標誌將增加詳細程度以顯示端口是打開還是關閉。一旦有連接,-z標誌將導致netcat退出。然後你可以通過$使用退出代碼?查看連接是否已建立。

$ 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

此外,您可以將mtr與-T標誌一起用於tcp,將-P標誌用於指定端口。這將類似於TCP上的traceroute,而不僅僅是ICMP。然而,這可能是矯枉過正的。

  我必須編輯以添加此位,因為我們無法將代碼放入註釋中。 Knoppix可能正在使用其netcat版本做一些不同的事情,但這是我從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]

42
2018-06-16 21:15



問題是,如果你嘗試 nc -z www.google.com 8000  它可能需要很長時間 - 5秒鐘加。如果我做 -w 1 那需要5秒鐘。如果我做 -w 3 然後它需要3倍的時間..光標閃爍15次,15秒。 -w 1 意味著是一秒鐘,但在cygwin上進行了測試。 5秒。當端口上有服務器時速度超快,但沒有時速度有點慢。 - barlop
詛咒評論中沒有新行......這似乎是cygwin的一個錯誤。使用linux Mint進行測試會顯示指定的延遲時間。運行此測試:日期; nc-zw5 www.google.com 8000;日期 - Falsenames
我還使用nmap請求贊助了@BenjiWiebe。 nc更容易放入腳本中,但是直觀地使用nmap會更容易。 - Falsenames
在knoppix中嘗試它。 nc -zv -w 1 www.google.com如何讓它嘗試一次?當我嘗試它是的-w 1工作但每秒重試它直到我做Ctrl-C。 - barlop
不確定Knopix版本的'nc -zv -w 1 www.google.com 80'是做什麼的。這在我的系統上工作正常,查詢一次並且像-z那樣丟棄應該這樣做。此外,如果沒有指定端口號,我的失敗說沒有指定端口。 - Falsenames


是的,使用 HPing 要做到這一點:

$ 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

請注意,它需要root權限(或SELinux功能)來創建原始IP數據包,就像ping一樣(很可能是在您的系統上使用)。


41
2018-06-17 15:35



我希望這是“接受的答案”。 hping很容易在多個回購中找到,不像paping,這是古老的狡猾代碼,不能在ARM上編譯。與NMAP不同,haping返回一個可以從shell腳本輕鬆修改的狀態代碼,因此它可以完美替代使用ping的地方。感謝這個答案,遺憾的是我沒有向下滾動到足以看到它並且不得不在另一個網站上找到它。 - Mark


你也可以使用 nping (部分 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

16
2018-06-23 09:57



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


你可以在šhell中使用Python作為一個不那麼短的內容:

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

6
2017-12-18 22:11



你不要把它粘貼到python傻鵝身上。將其粘貼到bash中。 - AXE-Labs
是的,我是一個白痴,刪除評論,謝謝它完美的工作。 - rob
loOSool,CLOSET - srghma


我加 watch 工具在這裡:

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
2018-06-15 10:48





僅供參考,想要分享Vivek Gite的帖子: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/#comment-920398

他列出了各種方式,其中一些方法已在此處公佈。但對我來說最令人驚訝的只不過是 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"

或者是一個超級簡單的版本:只看下面命令模式的輸出:

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

使用隨機docker容器時很有用。


3
2018-06-06 13:07



looking at the output  - 只檢查返回代碼 $? 可以提供幫助。它也掛在關閉的端口上,可能有些超時可以在任何地方配置...... - vp_arth


您是否嘗試在該節點上測試通信或從端口80獲得響應? PING 將嘗試通過ICMP與特定主機建立通信,這與端口無關。

相反,試試 http://nmap.org/ 檢查端口信息和測試通信:

nmap -v -p 80 onofri.org

2
2018-06-19 15:58



不確定您使用的是哪個版本的nmap。在我的系統上,它需要-v和-p分開,如'nmap -v -p 80 onofri.org'。這是因為-v和-vv意味著不同的東西,-v將更多的v作為參數。 - Falsenames