linux nc 详解
生活随笔
收集整理的這篇文章主要介紹了
linux nc 详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
功能說明:功能強大的網絡工具
netcat(nc)是一個簡單而有用的工具,不僅可以通過使用TCP或UDP協議的網絡連接讀寫數據,同時還是一個功能強大的網絡調試和探測工具,能夠建立你需要的幾乎所有類型的網絡連接
安裝:
root@pts/0 # yum -y install nc幫助:
root@pts/0 # nc -h usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port][-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version][-x proxy_address[:port]] [hostname] [port[s]]Command Summary:-4 Use IPv4-6 Use IPv6-D Enable the debug socket option-d Detach from stdin-h This help text-i secs Delay interval for lines sent, ports scanned-k Keep inbound sockets open for multiple connects-l Listen mode, for inbound connects-n Suppress name/port resolutions-p port Specify local port for remote connects-r Randomize remote ports-S Enable the TCP MD5 signature option-s addr Local source address-T ToS Set IP Type of Service-C Send CRLF as line-ending-t Answer TELNET negotiation-U Use UNIX domain socket-u UDP mode-v Verbose-w secs Timeout for connects and final net reads-X proto Proxy protocol: "4", "5" (SOCKS) or "connect"-x addr[:port] Specify proxy address and port-z Zero-I/O mode [used for scanning]Port numbers can be individual or ranges: lo-hi [inclusive]man 手冊翻譯:
NAMEnc — 一個任意的TCP和UDP連接和監聽工具SYNOPSISnc [-46bCDdhklnrStUuvZz] [-I length] [-i interval] [-O length] [-P proxy_username] [-p source_port] [-q seconds] [-s source] [-T toskeyword] [-V rtable] [-w timeout][-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]DESCRIPTIONnc (或 netcat) 實用工具用于任何涉及到TCP, UDP, 或 UNIX-domain sockets的場景[不怎么會翻譯這個,按大致意思來了原文:The nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets.]. 它可以打開TCP 連接, 發送UDP數據包,監聽任意的TCP和UDP端口, 實現端口掃描, 和同時處理IPV4和IPV6. 不同于telnet(1), nc腳本很nice, 并且輸出錯誤信息到標準錯誤,而不是標準輸出, as telnet(1) does with some.常見用法包括:· 簡易 TCP 代理· 基于HTTP客戶端和服務端的shell腳本· 網絡守護進程測試· 一個用于ssh(1)的 SOCKS 或 HTTP 代理命令行 · 還有很多,很多有以下選項可用:-4 強制nc只使用IPv4地址。-6 強制nc只使用IPV6地址.-b 允許廣播.-C 發送CRLF作為換行符.-D 開啟debugging 在 socket.-d 不嘗試從stdin讀取數據.-h 打印nc幫助信息.-I length指定TCP接收緩沖區大小.-i interval指定文本行發送和接收的延時時間. 也可以制造連接到多端口的延時.-k 強制nc持續監聽另一個連接直到它的連接完成. 沒有 -l 選項是錯誤的.-l 用于指定nc應該監聽一個傳入的連接,而不是連接到遠程主機. 該選項不能與以下選項聯合使用-p, -s, 或 -z 選項. 此外, 任何用-w選項指定的超時會被忽略.-n 任何指定的地址,主機名或端口都不做任何DNS或服務解析.-O length指定TCP發送緩沖區的大小.-P proxy_username指定一個用戶名到代理服務器用于請求認證。如果沒有指定用戶名那么將不會嘗試認證。 代理認證功能目前只支持HTTP CONNECT代理.-p source_port指定nc使用的源端口,受到權限和可用性的限制.-q seconds在stdin EOF之后, 等待指定秒數之后再退出. 如果秒數是負數, 永久等待.-r 指定源和/或目標端口隨機選擇而不是一個范圍序列或系統分配的順序.-S 開啟RFC 2385 TCP MD5簽名選項.-s source指定IP的接口用于發送數據包. 對于UNIX-domain 數據報 sockets, 指定創建和使用本地臨時socket文件這樣可以使數據報可以被接收。不可同時使用-l選項.-T toskeyword改變IPv4 TOS值. toskeyword may be one of critical, inetcontrol, lowcost, lowdelay, netcontrol, throughput, reliability, or one of the DiffServ Code Points: ef, af11... af43, cs0 ... cs7(這句不會翻譯); 或者一個十六進制或十進制數. -t 引發nc發送RFC 854 DON'The WON'T響應給RFC 854 DO和WILL請求。這使得使用nc腳本化telnet會話成為可能。-U 限定使用 UNIX-domain sockets.-u 使用UDP代替默認的TCP選項。對于UNIX-domain sockets,使用一個數據報 socket 代替一個 stream socket.如果使用UNIX-domain socket, 除非給定-s標記,否則會在/tmp創建一個臨時的receiving socket。-V rtable設置要使用的路由表. 默認是 0.-v 使nc給出更詳細的輸出.-w timeout無法建立的或者閑置的連接在指定秒數之后超時. -w標記不會影響到-l選項, 例如. nc 將會不間斷的監聽一個連接, 無論有沒有-w標記. 默認都是不超時的.-X proxy_protocol要求nc使用指定協議連接到代理服務器. 支持的協議有 “4” (SOCKS v.4), “5” (SOCKS v.5) and “connect” (HTTPS proxy).如果不指定協議, SOCKS version 5將會使用.-x proxy_address[:port]要求nc使用指定代理地址和端口連接到目標。如果不指定端口, 使用默認的代理協議端口 (1080 for SOCKS, 3128 for HTTPS).-Z DCCP mode(數據報擁塞控制協議).-z 指定nc只是掃描正在監聽的守護進程,不發送任何數據. 不可和-l選項同時使用。目標可以是一個數字IP地址或字符主機名(除過指定-n選項外). 一般來說, 必須指定目標, 除非給出-l選項 (在這種情況下使用本地主機). 對于 UNIX-domain sockets, 一個目標是必要的,并且是一個socket路徑被用于連接(或監聽,如果-l選項被給定的話)。端口可以是一個整數或者一個范圍的端口號. 端口范圍使用這種格式指定nn-mm. 一般來說, 一個目標端口必須被指定, 除非-U選項被給出.客戶端/服務器模式使用nc建立一個非常基本的客戶端/服務器模式是非常簡單的。在一個控制臺上,開啟nc監聽一個指定的端口等待連接。范例:$ nc -l 1234nc現在正在監聽1234端口等待連接。在第二個控制臺上(或第二臺機器), 連接到正在監聽的主機端口上:$ nc 127.0.0.1 1234現在應該在端口之間建立了連接。在第二個控制臺上的任何鍵入內容將會串發到第一個控制臺上,反之亦然. 在連接建立之后,nc不真正關心哪一方用于‘服務端’,哪一方用于‘客戶端’. 連接可以用EOF中斷 (‘^D’).在這個netcat沒有-c或-e選項, 但是你仍然可以在連接建立之后執行一個命令通過文件描述符重定向的形式。這里務必小心,因為開放一個端口讓任何人連接并執行任意的命令在你的站點上是非常危險的。如果你真的想這么做,這里是一個范例:在‘服務器’端:$ rm -f /tmp/f; mkfifo /tmp/f$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f在‘客戶端’:$ nc host.example.com 1234$ (shell prompt from host.example.com)通過這個步驟, 你在‘服務器’端創建了一個fifo在/tmp/f并且使nc監聽地址127.0.0.1的1234端口,當一個‘客戶端’建立連接成功到那個端口,/bin/sh在‘服務器’端執行并且給‘客戶端’shell提示符。當連接終止時,nc同樣也會退出。如果你想持續監聽,使用-k, 但是命令退出時這個選項將不會重啟它或保持nc運行(這句翻譯好別扭,貼出原文參考:but if the command quits this option won't restart it or keep nc running.)同樣別忘了刪掉文件描述符當你不再需要它的時候:$ rm -f /tmp/f數據傳輸前一個區域的范例可以擴展為構建一個基本的數據傳輸模式. 任何信息輸入的一端將會通過連接輸出到另一端, 并且輸入和輸出可以輕松捕獲用于文件傳輸。首先使用nc監聽一個指定端口,并且捕獲輸出到一個文件:$ nc -l 1234 > filename.out使用第二個機器,連接到nc進程監聽的這個端口上,喂給它要傳輸的文件:$ nc host.example.com 1234 < filename.in在文件完成傳輸之后,連接會自動關閉。和服務器交談有時“手工”和服務器交談比通過一個用戶接口更有用。這可以幫助解決故障,當需要驗證由客戶端發起的請求,服務器發送的什么數據響應到命令行時是有必要的。舉個例子,檢測網站主頁:$ printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80注意這同樣顯示了web服務器發送的headers. 他們可以使用例如sed(1)之類的工具過濾,如果有必要的話.更多復雜的范例同樣可以構建當用戶知道服務器需要的請求格式時。再比如,一個email可以使用以下方式提交到一個SMTP服務端:$ nc [-C] localhost 25 << EOFHELO host.example.comMAIL FROM:<user@host.example.com>RCPT TO:<user2@host.example.com>DATABody of email..QUITEOF端口掃描想在目標機器上了解哪些端口開放并且運行服務可能很有用。-z標記可以用于告訴nc報告開放的端口,而不是初始化一個連接。通常通過聯合使用-v選項打開詳細輸出到stderr很有用。例如:$ nc -zv host.example.com 20-30Connection to host.example.com 22 port [tcp/ssh] succeeded!Connection to host.example.com 25 port [tcp/smtp] succeeded!端口范圍限定掃描20 - 30,通過升序.你同樣可以指定一個要掃描的端口列表,例如:$ nc -zv host.example.com 80 20 22nc: connect to host.example.com 80 (tcp) failed: Connection refusednc: connect to host.example.com 20 (tcp) failed: Connection refusedConnection to host.example.com port [tcp/ssh] succeeded!端口掃描順序由你給定的次序決定.亦或者,對于知道哪個服務端軟件正在運行,是哪個版本可能有用。這些信息通常包含在 greeting banners 。為了獲取這些信息,有必要首先制造一個連接,然后當banner獲取到的時候破壞掉連接。這可以通過用-w標記指定一個短時間超時,或者可能通過發送一個"QUIT"命令給服務器的方式來獲得:$ echo "QUIT" | nc host.example.com 20-30SSH-1.99-OpenSSH_3.6.1p2Protocol mismatch.220 host.example.com IMS SMTP Receiver Version 0.84 Ready其他范例打開一個TCP連接到host.example.com的42端口,使用31337作為源端口,并且設置5秒超時:$ nc -p 31337 -w 5 host.example.com 42打開一個UDP連接到host.example.com的53端口:$ nc -u host.example.com 53打開一個TCP連接到host.example.com的42端口,使用10.1.2.3作為本地端IP用于連接:$ nc -s 10.1.2.3 host.example.com 42創建和監聽一個UNIX-domain stream socket:$ nc -lU /var/tmp/dsocket連接到host.example.com的42端口,通過10.2.3.4上的8080端口的HTTP代理連接。這個范例同樣可以使用ssh(1)實現; 更多信息請參考ssh_config(5)中的ProxyCommand directive。$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42同樣的范例,這次使用“ruser”用戶名開啟代理認證,如果代理需要認證的話:$ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42SEE ALSOcat(1), ssh(1)AUTHORSOriginal implementation by *Hobbit* ?hobbit@avian.org?.Rewritten with IPv6 support by Eric Jackson <ericj@monkey.org>.Modified for Debian port by Aron Xu ?aron@debian.org?.CAVEATSUDP port scans using the -uz combination of flags will always report success irrespective of the target machine's state. However, in conjunction with a traffic sniffer either onthe target machine or an intermediary device, the -uz combination could be useful for communications diagnostics.Note that the amount of UDP traffic generated may be limitedeither due to hardware resources and/or configuration settings.再來一個進階點的實用小例子
nc -l 1234 |tar -xvf - #目標機上執行 tar -cvf - 目錄 |nc 目標機IP 1234 #在被遷移機上執行 #能實現塊級別的壓縮遷移 。速度是最快的。遇到大量零碎小文件要同步的時候很有用。轉載于:https://blog.51cto.com/chaichuan/2095844
總結
以上是生活随笔為你收集整理的linux nc 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬取校园新闻首页的新闻的详情,使用正则表
- 下一篇: QCon北京2018关键词:Kubern