1. 程式人生 > >nc用法小記

nc用法小記

mon 定義 poi 用途 lua 技術分享 unix 顯式 版本

By francis_hao Jun 30,2017

ncat:連接和重定向套接字

概要

ncat [OPTIONS...] [hostname] [port]

描述

ncat 是一個集成的網絡工具包,從命令行通過網絡讀寫數據。它被設計成一個提供即時連接到其他應用和用戶的可靠性後端工具,ncat不僅僅工作於IPv4和IPv6,它提供給用戶一個近乎無限數量的潛在用途。

ncat提供了以下特性:重定向TCP、UDP和SCTP端口到其他站點,支持SSL,通過SOCKS4或HTTP的代理連接等。

ncat 操作處於兩種模式中的一種:連接模式和監聽模式。其他模式,像HTTP代理服務器,處於這兩種模式的特殊情形。在連接模式,ncat類似一個客戶端,在監聽模式,ncat類似一個服務器。

在連接模式下,hostnameport參數指明應該連接到哪,hostname是需要的,它可能是一個域名或ip地址。如果有port,它一定是一個十進制的端口號。如果省略,默認是31337。

在監聽模式下,hostnameport指定服務器要綁定的地址。這兩個參數都是可選的,如果省略了hostname,默認監聽所有可獲取的IPv4和IPv6地址。如果省略了port,默認為31337。

選項

選項

說明

協議選項

-4

僅使用IPv4

-6

僅使用IPv6

-U, --unixsock

使用Unix domain sockets而不是network sockets(見下文Unix domain sockets描述)

-u, --udp

使用UDP連接(默認是TCP)

--sctp

使用SCTP連接(默認是TCP)

連接模式選項

-g hop1[,hop2,…]

為IPv4設置寬松源路由的下一跳,你可以使用一個-g帶以逗號分隔的路由表,或者使用多個-g,每個-g帶一個路由。或者這兩者混合使用,hop可以是域名或者ip地址。

-G ptr

Set source routing pointer

-p port, --source-port port

設置要綁定的端口號

-s host, --source host

設置要綁定的地址

監聽模式選項

-l, --listen

進入監聽模式

-m numconns,

--max-conns numconns

ncat接受的最大的同時連接數。默認是100

-k, --keep-open

通常監聽服務器只接收一個連接然後當連接關閉時退出。此選項可以使它同時接收多個連接,並且在這些連接關閉後繼續監聽其他連接。

此選項必須和-l同時使用。

在此模式下,ncat沒辦法知道網絡輸入什麽時候終止,因此它會保持運行直到被打斷,這也意味著它不會關閉它的輸出流,因此任何讀取ncat並等待EOF的程序都將會掛起。

--broker

允許多個分布的客戶端連接到ncat服務器,並且和彼此通訊,ncat可以在不能直接連接(例如NAT下)的系統中進行中繼通訊。

此選項和-l選項同時使用,使監聽端口使能中繼功能。

--chat

使能對話功能,可以在多個用戶間交換數據。此模式下,中繼功能被打開。

ncat 在每條消息前加上唯一的ID,以區分不同的客戶端發送的不同的內容。

另外,不可打印字符(例如控制字符)被避開,以防影響終端

此選項的用法:

服務器:nc -l –chat

客戶端1:nc server_ip

客戶端2:nc server_ip

其中,服務器發消息時,客戶端1、2均能收到,客戶端1發消息時只有客戶端2能收到,服務器不接收消息。

SSL選項

--ssl

在連接模式,此選項顯式的和SSL服務器協商會話以加密連接,這對和使能了SSL的HTTP服務器傳輸提供了便利。

在服務器模式,此選項監聽連入的SSL連接,而不是看起來亂糟糟的數據。

--ssl-verify

在客戶端模式,--ssl-verify類似--ssl,但是它還需要驗證服務器的證書。

ncat帶有一個默認的信任證書列表,在文件ca-bundle.crt裏。--ssl-trustfile可以用以指定自定義的信任列表,使用-v一次或多次了解驗證失敗詳情。

ncat不驗證吊銷的證書。

此選項對於服務器模式無意義。

--ssl-cert certfile.pem

此選項指定一個PEM編碼的證書文件,用於認證服務器(監聽模式)或客戶端(連接模式)。一般和--ssl-key結合使用

--ssl-key keyfile.pem

指定用--ssl-cert指定的證書文件對應的私鑰

--ssl-trustfile cert.pem

此選項設置一系列受信任的證書,若不指定--ssl-verify,則此選項無效,PEM文件裏包含了受信任的證書,使用此選項後,ncat就不會使用默認的證書。

代理選項

--proxy host[:port]

通過host:port指定請求的代理,使用的協議由--proxy-type指定

如果沒有指定的端口號,那麽代理協議的眾所周知端口將被使用(SOCKS的1080和HTTP的3128)。但是,當使用IP地址而不是主機名指定IPv6的HTTP代理服務時,端口號必須同時被指定,如果代理需要認證,那麽使用--proxy-auth選項。

--proxy-type proto

在連接模式,這個選項使用協議proto連接到用—proxy指定的主機,在監聽模式,用此指定的協議用作代理服務器。

連接模式當前可使用的協議是http(CONNECT)和socks4(SOCKSv4)。作為服務器當前僅支持http。如果此項未使用,默認的協議是http

--proxy-auth user[:pass]

在連接模式,指定在連接服務器時會用到的身份驗證信息。

在監聽模式,指定客戶端在連接時需要提供的身份驗證信息。

若使用--proxy-type http,驗證信息應該是user:pass,若使用--proxy-type socks4,驗證信息只需要提供username。

命令執行選項

-e command,

--exec command

當連接已建立時執行指定的命令,命令必須以全路徑名被指定,遠端客戶端所有的輸入將被發送給該應用,並且回應會通過套接字返回給遠端客戶端,因此,讓你的命令行應用通過套接字可交互。

結合--keep-open選項,Ncat可以同時處理多個連接到你指定的端口/應用。

Ncat只接受一個可定義的最大同時連接數(通過-m指定),默認這被設置未100。

-c command,

--sh-exec command

類似-e,但是它會嘗試通過/bin/sh執行命令,這意味著你不必為命令指定全路徑,而且,shell相關的因子,例如環境變量是可獲取的。

--lua-exec file

當連接建立時運行指定的作為lua腳本的文件,腳本的標準輸入和標準輸出都被重定向到連接的數據流。

權限控制選項

--allow host[,host,...]

只允許指定的host列表連接到Ncat程序,所有其余的連接都會被拒絕。

為防止--allow和--deny指定的host產生沖突,使用--allow選項優先。

--allowfile file

類似--allow,只不過被允許的host列表放在了以回車分割的文件裏。

--deny host[,host,...]

拒絕主機列表

--denyfile file

主角主機列表文件

時間選項

-d time, --delay time

設置發送行的延時間隔,這對特定時間段內發送數據量有作用,可用於低帶寬的站點。

默認時間單位是s,但是也可以顯式的指明時間單位,例如ms,s,m和h。

-i time,

--idle-timeout time

設置空閑超時時間,如果空閑超時時間到了,連接會被終止。

-w time, --wait time

設置嘗試連接的超時時間

輸出選項

-o file, --output file

轉儲會話數據到文件

-x file, --hex-dump file

轉儲會話數據作為十六進制到文件

--append-output

當使用-o或-x選項並指定-append-ouput選項時,它將追加結果到文件而不是截短所指定的輸出文件

-v, --verbose

進入"啰嗦模式",這將會顯示很多有用的信息。使用多個(-vv,-vvv…)進入更"啰嗦"的模式。

雜項

-C, --crlf

此選項使Ncat在和標準輸入會話時,轉換LF(Line-Feed,換行)到CRLF(Carriage-Return& Line-Feed,回車換行),這對一些嚴格的服務器來說很有用,因為它們只接受CRLF作為行尾。

-h, --help

顯示幫助信息並退出

--recv-only

若指定此選項,Ncat將只接收數據而不會嘗試去發送任何數據。

--send-only

只發送數據並忽略所有接收到的數據,此選項也會使得從標準輸入接收到EOF時關閉連接並終止。

-t, --telnet

處理Telnet協商DO/DONT WILL/WONT,這使得Telnet會話腳本化。

--version

顯示Ncat版本並退出。

UNIX域套接字

Unix域套接字作為文件系統項,你必須給要連接或監聽的套接字指定一個名字。例如,準備一個連接:

ncat -U ~/unixsock

監聽一個套接字

ncat -l -U ~/unixsock

如果套接字不存在,監聽模式將會創建一個套接字。套接字將會繼續存在,即使程序已結束。

示例

Connect to example.org on TCP port 8080.
ncat example.org 8080

Listen for connections on TCP port 8080.
ncat -l 8080

Redirect TCP port 8080 on the local machine to host on port 80.
ncat --sh-exec "ncat example.org 80" -l 8080 --keep-open

Bind to TCP port 8081 and attach /bin/bash for the world to access freely.
ncat --exec "/bin/bash" -l 8081 --keep-open

Bind a shell to TCP port 8081, limit access to hosts on a local network, and limit the maximum number of simultaneous connections to 3.
ncat --exec "/bin/bash" --max-conns 3 --allow 192.168.0.0/24 -l 8081 --keep-open

Connect to smtphost:25 through a SOCKS4 server on port 1080.
ncat --proxy socks4host --proxy-type socks4 --proxy-auth user smtphost 25

Create an HTTP proxy server on localhost port 8888.
ncat -l --proxy-type http localhost 8888

Send a file over TCP port 9899 from host2 (client) to host1 (server).
HOST1$ ncat -l 9899 > outputfile
HOST2$ ncat HOST1 9899 < inputfile

Transfer in the other direction, turning Ncat into a "one file" server.
HOST1$ ncat -l 9899 < inputfile
HOST2$ ncat HOST1 9899 > outputfile

技術分享
本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請註明出處:
轉載自: http://www.cnblogs.com/yinghao1991/p/7100663.html

參考

【1】 man nc

nc用法小記