Linux命令ping,nc的學習

yuntui發表於2016-11-03
今天看了下《Linux大棚命令百篇》網路和系統篇,發現了幾個很不錯的命令,我是看著目錄然後根據自己的需要選了3個命令,沒想到3個命令都讓人眼前一亮,重新整理了我原本的認知。
首先第一個命令還是老生常談的ping
傳統的ping就是下面的樣子,這個也是我們熟悉的ping
# ping 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 56(84) bytes of data.
64 bytes from 10.127.133.96: icmp_seq=1 ttl=63 time=0.230 ms
64 bytes from 10.127.133.96: icmp_seq=2 ttl=63 time=0.216 ms
...
當然Linux下的ping必須制定次數,我們可以指定次數,使用-c選項,然後會得到一個統計結果,可能對於很多人來說,需要關注的就是最後的統計結果,那麼ping也可以實現。
# ping  -c 3 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 56(84) bytes of data.
64 bytes from 10.127.133.96: icmp_seq=1 ttl=63 time=0.205 ms
64 bytes from 10.127.133.96: icmp_seq=2 ttl=63 time=0.233 ms
64 bytes from 10.127.133.96: icmp_seq=3 ttl=63 time=0.240 ms

--- 10.127.133.96 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.205/0.226/0.240/0.015 ms
我們使用-q選項來就可以直接得到統計結果。
# ping  -c 3 -q 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 56(84) bytes of data.

--- 10.127.133.96 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.208/0.219/0.237/0.017 ms
如果想根據資料包的大小來測試網路情況,ping也可以支援,那就是-s選項
# ping  -c 3 -q  -s 65507 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 65507(65535) bytes of data.

--- 10.127.133.96 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 1.424/1.468/1.501/0.032 ms
當然此處我指定為65507也是有一定的意味,最大的資料包是65507
# ping  -c 3 -q  -s 65535 10.127.133.96
Error: packet size 65535 is too large. Maximum is 65507
而對於傳送間隔,可以指定頻度,也就意味著可以使用-i的選項顯式的指定傳送間隔或者使用-f選項儘可能快的傳送資料包。
比如我們顯式指定傳送間隔為2秒,則可以使用下面的方式:
# ping  -c 3 -q  -s 65507 -i 2 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 65507(65535) bytes of data.

--- 10.127.133.96 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 1.404/1.443/1.468/0.041 ms
如果希望儘可能快的傳送,也就是知名的flood ping
# ping  -c 3 -q  -s 65507 -f 10.127.133.96
PING 10.127.133.96 (10.127.133.96) 65507(65535) bytes of data.

--- 10.127.133.96 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 1.368/1.400/1.445/0.044 ms, ipg/ewma 2.380/1.429 ms
然後是輕巧的nc命令
這個命令在我解決tnsping超時的場景中收益良多,沒想到自己雖然發現它很有意思,但是沒有發現它的功能竟然還有很多,一定要好好掌握。
首先第一個就是可以簡單模擬一個聊天視窗,
可以開啟兩個視窗,就是兩個聊天視窗了,很類似Java程式設計中的socket通訊。
伺服器端開通埠,客戶端連線指定的伺服器IP和埠,就可以互相通訊了。
伺服器端開啟服務,開通埠12345
   nc -l 12345
然後客戶端發起連線請求。
  nc 10.127.133.86 12345
然後兩端傳送的訊息就可以正常接收了。當然我測試了一下,如果是兩個視窗之間的資料通訊是沒有問題的,如果是3個,最新的那個就會被忽略了。
當然nc的特長就是探測網路,一個亮點就是可以指定埠範圍來掃描。
比如探測10.127.133.96的埠20-25的情況,可以使用如下的命令, -n是指定使用IP的方式,-w是指定超時時間,-z是建立連線後立即斷開,不傳送資料包
# nc -z -v -n -w 2 10.127.133.96 20-25
nc: connect to 10.127.133.96 port 20 (tcp) failed: Connection refused
nc: connect to 10.127.133.96 port 21 (tcp) failed: Connection refused
Connection to 10.127.133.96 22 port [tcp/*] succeeded!
nc: connect to 10.127.133.96 port 23 (tcp) failed: Connection refused
nc: connect to 10.127.133.96 port 24 (tcp) failed: Connection refused
nc: connect to 10.127.133.96 port 25 (tcp) failed: Connection refused
最讓我感覺nc強大的地方就是檔案傳輸了,和scp,ftp等的亮點在於,nc傳輸檔案竟然不需要輸入使用者名稱密碼
一個簡單的檔案傳輸的例子如下,比如我們要傳輸的檔案為test.sh,服務端IP為10.127.133.86,客戶端IP為10.127.133.96
服務端的test.sh檔案需要傳送到客戶端10.127.133.96去。
服務端這樣設定:
# nc -v -l 12345 < test.sh

客戶端接受test.sh檔案,則使用如下的方式接收。
# nc -v -n 10.127.133.86 12345 > test.sh
命令執行之後,服務端開始推送,生成的日誌如下:
# nc -v -l 12345 < test.sh
Connection from 10.127.133.96 port 12345 [tcp/italk] accepted
當然反過來可以,服務端接收客戶端的檔案test.sh,服務端設定為: nc -v -l 12345 > test.sh,客戶端設定為:nc -n 10.127.133.86 12345 <test.sh
如果傳送資料夾,nc藉助管道也可以實現
伺服器端傳送資料夾 dbm_lite,壓縮
# tar -cvPf - /U01/yangjr/test/dbm_lite |nc -l 12345
/U01/yangjr/test/dbm_lite/
/U01/yangjr/test/dbm_lite/bpm.sql
/U01/yangjr/test/dbm_lite/showgraph/

客戶端接收資料夾,解壓
$ nc -n 10.127.133.86 12345|tar -xvPf -
    

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30633755/viewspace-2127665/,如需轉載,請註明出處,否則將追究法律責任。

相關文章