nc命令全名爲netcat,顧名思義就是經過TCP或UDP從網絡讀寫數據。ios
不少事情不必定非得抓包,nc也能發揮巨大做用。redis
一、傳輸文件chrome
使用<>重定向符(只適用單文件,不推薦、失敗時 ">" 產生空文件)shell
nc -l 8888 < demo.txt # 在本機8888端口偵聽TCP鏈接,將收到的數據寫入文件網絡
nc ip 8888 > demo.txt # 文件接收端:將文件內容經過網絡"cat"到遠端運維
使用tar傳輸文件(推薦,好處是保留了原目錄結構和權限)curl
tar cz demo1.txt demo_dir/ | nc -l 8888 # 監聽8888端口,有鏈接時開始tar打包並"cat"到遠端tcp
nc ip 8888 | tar zx # 鏈接、接收數據、解壓一步到位。測試
二、創建網絡管道url
nc -l 8888 # 接收消息
echo msg | nc ip 8888 # 發送消息
三、遷移生產機房數據到測試機房(運維電腦建管道)
tar cz demo1.txt demo_dir/ | nc -l 8888 # 生產機房ipA
nc -l 8888 | tar zx # 測試機房ipB
nc ipA 8888 | nc ipB 8888 # 運維我的電腦,連通兩臺機器的8888端口。
四、測試網絡連通 (排查測試機房的lbg轉發udp問題)
curl 調試http,即7層很是高效。但如何調試4層網絡呢?答案就是nc
測試機房lbg作了公網udp服務的映射,但測試同窗發現程序出錯,懷疑網絡問題,找運維同窗排查。
nc -ul 9999 # 服務ipS 監聽9999端口 該端口映射到公網 ipVS:portVS
nc -zuv ipS 9999 # 內網udp連通成功 顯示Connection to ipS 9999 port [udp/*] succeeded!
nc -zuv ipVS portVS # 公網udp連通失敗 顯示Connection to ipVS portVS port [udp/*] fail!
1、上如何檢查tcp?以上的參數u去掉,默認就是tcp。
2、進一步寫出nagios插件,檢查udp服務端口(以部署在PP的udp消息推送監控中)
五、代替telnet,測試mc,浮雲等等。
echo -e "stats\r\n" | nc ipS portMC # 非交換式查看mc的狀態。
echo -e "INFO\r\n" | nc ipS portREDIS # 非交換式查看redis的狀態。
非交換的set、get檢查浮雲ds # 已部署到PP的浮雲監控。
六、使用nc發郵件,發送http請求,反彈shell,端口轉發等等,請man nc
echo -e "GET / HTTP/1.0\r\n" | nc uc.cn 80