一、版本
通常的Linux發行版中都帶有NetCat(簡稱nc),甚至在拯救模式CD光牒中也由busybox提供了簡版的nc工具。但不同的版本,其參數的使用略有差異。
1
2
3
4
5
6
7
8
<code>引用[root@hatest1 ~]</code><code># cat /etc/asianux-release</code>
<code>Asianux release 2.0 (Trinity SP2)</code>
<code>[root@hatest1 ~]</code><code># cat /etc/redflag-release</code>
<code>Red Flag DC Server release 5.0 (Trinity SP2)</code>
<code>[root@hatest1 ~]</code><code># type -a nc</code>
<code>nc is </code><code>/usr/bin/nc</code>
<code>[root@hatest1 ~]</code><code># rpm -q nc</code>
<code>nc-1.10-22</code>
建議在使用前,先用man nc看看幫助。這裡以紅旗DC Server 5.0上的1.10版本進行簡單說明。
假設兩伺服器資訊:
<code>引用server1: 192.168.228.221</code>
<code>server2: 192.168.228.222</code>
二、常見使用
1、遠端拷貝檔案
從server1拷貝檔案到server2上。需要先在server2上,用nc激活監聽,server2上運作:
<code>引用[root@hatest2 tmp]</code><code># nc -lp 1234 > install.log</code>
<code>server1上運作:</code>
<code>引用[root@hatest1 ~]</code><code># ll install.log</code>
<code>-rw-r--r-- 1 root root 39693 12月 20 2007 </code><code>install</code><code>.log</code>
<code>[root@hatest1 ~]</code><code># nc -w 1 192.168.228.222 1234 < install.log</code>
2、克隆硬碟或分區
操作與上面的拷貝是雷同的,隻需要由dd獲得硬碟或分區的資料,然後傳輸即可。
<code># nc -l -p 1234 | dd of=/dev/sda</code>
<code>server1上執行傳輸,即可完成從server1克隆sda硬碟到server2的任務:</code>
<code># dd if=/dev/sda | nc 192.168.228.222 1234</code>
※ 完成上述工作的前提,是需要落實CD光牒的拯救模式支援伺服器上的網卡,并正确配置IP。
3、端口掃描
可以執行:
<code>引用</code><code># nc -v -w 1 192.168.228.222 -z 1-1000</code>
<code>hatest2 [192.168.228.222] 22 (</code><code>ssh</code><code>) </code><code>open</code>
4、儲存Web頁面
<code># while true; do nc -l -p 80 -q 1 < somepage.html; done</code>
5、模拟HTTP Headers
9
10
11
12
13
14
15
16
17
18
19
<code>引用[root@hatest1 ~]</code><code># nc www.linuxfly.org 80</code>
<code>GET / HTTP</code><code>/1</code><code>.1</code>
<code>Host: ispconfig.org</code>
<code>Referrer: mypage.com</code>
<code>User-Agent: my-browser</code>
<code>HTTP</code><code>/1</code><code>.1 200 OK</code>
<code>Date: Tue, 16 Dec 2008 07:23:24 GMT</code>
<code>Server: Apache</code><code>/2</code><code>.2.6 (Unix) DAV</code><code>/2</code> <code>mod_mono</code><code>/1</code><code>.2.1 mod_python</code><code>/3</code><code>.2.8 Python</code><code>/2</code><code>.4.3 mod_perl</code><code>/2</code><code>.0.2 Perl</code><code>/v5</code><code>.8.8</code>
<code>Set-Cookie: PHPSESSID=bbadorbvie1gn037iih6lrdg50; path=/</code>
<code>Expires: 0</code>
<code>Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0</code>
<code>Pragma: no-cache</code>
<code>Cache-Control: private, post-check=0, pre-check=0, max-age=0</code>
<code>Set-Cookie: oWn_sid=xRutAY; expires=Tue, 23-Dec-2008 07:23:24 GMT; path=/</code>
<code>Vary: Accept-Encoding</code>
<code>Transfer-Encoding: chunked</code>
<code>Content-Type: text</code><code>/html</code>
<code>[......]</code>
在nc指令後,輸入紅色部分的内容,然後按兩次回車,即可從對方獲得HTTP Headers内容。
6、聊天
nc還可以作為簡單的字元下聊天工具使用,同樣的,server2上需要啟動監聽:
<code>root@hatest2 tmp]</code><code># nc -lp 1234</code>
<code>server1上傳輸:</code>
<code>[root@hatest1 ~]</code><code># nc 192.168.228.222 1234</code>
這樣,雙方就可以互相交流了。使用Ctrl+D正常退出。
7、傳輸目錄
從server1拷貝nginx-0.6.34目錄内容到server2上。需要先在server2上,用nc激活監聽,server2上運作:
<code>引用[root@hatest2 tmp]</code><code># nc -l 1234 |tar xzvf -</code>
<code>引用[root@hatest1 ~]</code><code># ll -d nginx-0.6.34</code>
<code>drwxr-xr-x 8 1000 1000 4096 12-23 17:25 nginx-0.6.34</code>
<code>[root@hatest1 ~]</code><code># tar czvf - nginx-0.6.34|nc 192.168.228.222 1234</code>
8、參數簡介
這僅是一個1.10版本的簡單說明,詳細的參數使用還是需要看man:
<code>引用想要連接配接到某處: nc [-options] </code><code>hostname</code> <code>port[s] [ports] ... </code>
<code>綁定端口等待連接配接: nc -l -p port [-options] [</code><code>hostname</code><code>] [port] </code>
<code>參數: </code>
<code>-g gateway </code><code>source</code><code>-routing hop point[s], up to 8 </code>
<code>-G num </code><code>source</code><code>-routing pointer: 4, 8, 12, ... </code>
<code>-h 幫助資訊 </code>
<code>-i secs 延時的間隔 </code>
<code>-l 監聽模式,用于入站連接配接 </code>
<code>-n 指定數字的IP位址,不能用</code><code>hostname</code>
<code>-o </code><code>file</code> <code>記錄16進制的傳輸 </code>
<code>-p port 本地端口号 </code>
<code>-r 任意指定本地及遠端端口 </code>
<code>-s addr 本地源位址 </code>
<code>-u UDP模式 </code>
<code>-</code><code>v</code> <code>詳細輸出——用兩個-</code><code>v</code><code>可得到更詳細的内容 </code>
<code>-w secs timeout的時間 </code>
<code>-z 将輸入輸出關掉——用于掃描時,其中端口号可以指定一個或者用lo-hi式的指定範圍。</code>
9、1.84版本參數簡介
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<code>1. nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]</code>
<code>2. [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [-x </code>
<code>3. proxy_address[:port]] [</code><code>hostname</code><code>] [port[s]] </code>
<code> </code>
<code>1. -4 強制使用ipv4 </code>
<code>2. -6 強制使用ipv6 </code>
<code>3. -D 允許socket通信傳回debug資訊 </code>
<code>4. -d 不允許從标準輸入中讀取 </code>
<code>5. -h 顯示nc幫助文檔 </code>
<code>6. -i interval </code>
<code>7. 指定每行之間内容延時發送和接受,也可以使多個端口之間的連接配接延時 </code>
<code>8. -k 當一個連接配接結束時,強制nc監聽另一個連接配接。必須和-l一起使用 </code>
<code>9. -l 用于監聽傳入的資料連結,不能與-p -z -s一起使用。-w 參數的逾時也會被忽略 </code>
<code>10. -n 不執行任何位址,主機名,端口或DNS查詢 </code>
<code>11. -p 指定nc使用的源端口,受權限限制且不能餘-l一起使用 </code>
<code>12. -r 指定nc使用的源端口和目的端口,不能使用系統原來就指定的那些端口 </code>
<code>13. -S 允許在RFC 2385的TCP MD5簽名選項 </code>
<code>14. -s source_ip_address </code>
<code>15. 指定用于發包的接口的IP位址,不能和-l一起使用 </code>
<code>16. -T ToS </code>
<code>17. 指定連結的IP服務類型(TOS) </code>
<code>18. -C 自動換行 </code>
<code>19. -t 使nc能夠與telnet互動 </code>
<code>20. -U 使用UNIX域socket </code>
<code>21. -u 使用udp代替預設的tcp選項 </code>
<code>22. -</code><code>v</code> <code>輸出詳細報告 </code>
<code>23. -w timeout </code>
<code>24. 一個連結一段時間無操作,則自動斷開,預設無逾時 </code>
<code>25. -X proxy_version </code>
<code>26. 指定nc使用代理時所采用的協定,可選的有socksv4,socks5以及https。預設socks5 </code>
<code>27. -x proxy_address[:port] </code>
<code>28. 指定nc使用的代理位址和端口。預設設定:1080(SOCKS),3128(HTTPS) </code>
<code>29. -z 隻監聽不發送任何包</code>
三、版本差異
不用系統上提供的nc版本會有說不同,其提供的參數使用方法也略有差異。
例如,紅旗Asianux 3.0 SP1拯救CD光牒上的版本是供使用的參數僅有一部分:
引用# nc -h
<code>BusyBox v1.2.0 (2008.04.14-01:35+0000) multi-call binary</code>
<code>Usage: nc [OPTIONS] [IP] [port]</code>
<code>Netcat opens a pipe to IP:port</code>
<code>Options:</code>
<code> </code><code>-l listen mode, </code><code>for</code> <code>inbound connects</code>
<code> </code><code>-p PORT </code><code>local</code> <code>port number</code>
<code> </code><code>-i SECS delay interval </code><code>for</code> <code>lines sent</code>
<code> </code><code>-e PROG program to </code><code>exec</code> <code>after connect (dangerous!)</code>
<code> </code><code>-w SECS timeout </code><code>for</code> <code>connects and final net reads</code>
<code>而在Asianux 3.0 SP1系統中提供的nc版本則是1.84的,按上面的參數用法寫會執行不了:</code>
<code>引用[root@ftpserver ~]</code><code># rpm -q nc</code>
<code>nc-1.84-10</code>
<code>[root@ftpserver ~]</code><code># nc -lp 1234</code>
<code>usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]</code>
<code> </code><code>[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]</code>
<code> </code><code>[-x proxy_address[:port]] [</code><code>hostname</code><code>] [port[s]]</code>
講檢視man文檔,可見在這個版本中,-l是不能與-s、-p、-z一起使用的,-w參數也會被忽略,是以,正确的用法是:
<code>[root@ftpserver tmp]</code><code># nc -l 1234</code>
四、用在腳本中
nc每次啟動監聽後,都會在用戶端連接配接完成并退出的同時,服務端一同退出。是以,如果需要不斷的使用nc進行資料傳輸,需要在腳本中使用循環。利用nc實作更多的功能,可參考其rpm提供的參考腳本:
<code>引用</code><code># rpm -qd nc</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/Changelog</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/README</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/README</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/alta</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/bsh</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/dist</code><code>.sh</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/irc</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/iscan</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/ncp</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/probe</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/web</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/webrelay</code>
<code>/usr/share/doc/nc-1</code><code>.10</code><code>/scripts/websearch</code>
<code>/usr/share/man/man1/nc</code><code>.1.gz</code>
本文轉自 sjfbjs 51CTO部落格,原文連結:http://blog.51cto.com/11886896/1900220