什么是nc
nc是netcat的簡寫,有着網絡界的瑞士軍刀美譽。因為它短小精悍、功能實用,被設計為一個簡單、可靠的網絡工具
nc的作用
(1)實現任意TCP/UDP端口的偵聽,
nc可以作為server以TCP或UDP方式偵聽指定端口
(2)端口的掃描,
nc可以作為client發起TCP或UDP連接
(3)
機器之間傳輸文件
(4)
機器之間網絡測速
nc的控制參數不少,常用的幾個參數如下所列:
1) -l
用於指定nc將處於
偵聽模式。指定該參數,
則意味着nc被當作server,偵聽並接受連接,而非向其它地址發起連接。
2) -p <port>
暫未用到(老版本的nc可能需要在端口號前加-p參數,下面測試環境是centos6.6,nc版本是nc-1.84,未用到-p參數)
3) -s
指定發送數據的源IP地址,適用於多網卡機
4) -u
指定nc使用UDP協議,默認為TCP
5) -v
輸出交互或出錯信息,新手調試時尤為有用
6)-w
超時秒數,后面跟數字
7)-z
表示zero,表示掃描時不發送任何數據
nc用法1,網絡連通性測試和端口掃描
nc可以作為server端啟動一個tcp的監聽(注意,此處重點是起tcp,下面還會講udp)
先關閉A的防火牆,或者放行下面端口,然后測試B機器是否可以訪問A機器啟動的端口
在A機器上啟動一個端口監聽,比如 9999端口(注意:下面的-l 是小寫的L,不是數字1)
默認情況下下面監聽的是一個tcp的端口
nc -l 9999
nc用法2,使用nc傳輸文件和目錄
方法1,傳輸文件演示(先啟動接收命令)
使用nc傳輸文件還是比較方便的,因為不用scp和rsync那種輸入密碼的操作了
把A機器上的一個rpm文件發送到B機器上
需注意操作次序,receiver先偵聽端口,sender向receiver所在機器的該端口發送數據。
步驟1,先在B機器上啟動一個接收文件的監聽,格式如下
意思是把賴在9995端口接收到的數據都寫到file文件里(這里文件名隨意取)
nc -l port >file
nc -l 9995 >zabbix.rpm
步驟2,在A機器上往B機器的9995端口發送數據,把下面rpm包發送過去
nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm
方法3,傳輸目錄演示(方法發送文件類似)
步驟1,B機器先啟動監聽,如下
A機器給B機器發送多個文件
傳輸目錄需要結合其它的命令,比如tar
經過我的測試管道后面最后必須是 - ,不能是其余自定義的文件名
nc -l 9995 | tar xfvz -
步驟2,A機器打包文件並連接B機器的端口
管道前面表示把當前目錄的所有文件打包為 - ,然后使用nc發送給B機器
tar cfz - * | nc 10.0.1.162 9995
nc用法3,測試網速
測試網速其實利用了傳輸文件的原理,就是把來自一台機器的/dev/zero 發送給另一台機器的/dev/null
就是把一台機器的無限個0,傳輸給另一個機器的空設備上,然后新開一個窗口使用dstat命令監測網速
在這之前需要保證機器先安裝dstat工具
yum install -y dstat
方法1,測試網速演示(先啟動接收命令方式)
步驟1,A機器先啟動接收數據的命令,監聽自己的9991端口,把來自這個端口的數據都輸出給空設備(這樣不寫磁盤,測試網速更准確)
nc -l 9991 >/dev/null
步驟2,B機器發送數據,把無限個0發送給A機器的9991端口
nc 10.0.1.161 9991 </dev/zero