centos 埠測試之nc使用

伺服器埠測試是否正常,運維一般使用telnet來檢查,但它有局限性,伺服器的埠必須存在服務運行。
這時使用nc可以在服務端模擬開啟一個埠,再通過nc測試此埠,好用!
nc是netcat工具的簡稱,一個網路工具,可以用來埠掃描、文件傳輸等功能。
centos上面安裝也很簡單:

yum install nc -y

nc常用功能

1、實現任意TCP/UDP埠的偵聽,nc可以作為server以TCP或UDP方式偵聽指定埠
2、埠的掃描,nc可以作為client發起TCP或UDP連接
3、機器之間傳輸文件
4、機器之間網路測速

一般nc只用來做TCP/UDP協議的埠測試,其它功能少用!

nc幫助說明

# nc --help 
Ncat 7.50 ( //nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
  -4                         Use IPv4 only
  -6                         Use IPv6 only
  -U, --unixsock             Use Unix domain sockets only
  -C, --crlf                 Use CRLF for EOL sequence
  -c, --sh-exec <command>    Executes the given command via /bin/sh
  -e, --exec <command>       Executes the given command
      --lua-exec <filename>  Executes the given Lua script
  -g hop1[,hop2,...]         Loose source routing hop points (8 max)
  -G <n>                     Loose source routing hop pointer (4, 8, 12, ...)
  -m, --max-conns <n>        Maximum <n> simultaneous connections
  -h, --help                 Display this help screen
  -d, --delay <time>         Wait between read/writes
  -o, --output <filename>    Dump session data to a file
  -x, --hex-dump <filename>  Dump session data as hex to a file
  -i, --idle-timeout <time>  Idle read/write timeout
  -p, --source-port port     Specify source port to use
  -s, --source addr          Specify source address to use (doesn't affect -l)
  -l, --listen               Bind and listen for incoming connections
  -k, --keep-open            Accept multiple connections in listen mode
  -n, --nodns                Do not resolve hostnames via DNS
  -t, --telnet               Answer Telnet negotiations
  -u, --udp                  Use UDP instead of default TCP
      --sctp                 Use SCTP instead of default TCP
  -v, --verbose              Set verbosity level (can be used several times)
  -w, --wait <time>          Connect timeout
  -z                         Zero-I/O mode, report connection status only
      --append-output        Append rather than clobber specified output files
      --send-only            Only send data, ignoring received; quit on EOF
      --recv-only            Only receive data, never send anything
      --allow                Allow only given hosts to connect to Ncat
      --allowfile            A file of hosts allowed to connect to Ncat
      --deny                 Deny given hosts from connecting to Ncat
      --denyfile             A file of hosts denied from connecting to Ncat
      --broker               Enable Ncat's connection brokering mode
      --chat                 Start a simple Ncat chat server
      --proxy <addr[:port]>  Specify address of host to proxy through
      --proxy-type <type>    Specify proxy type ("http" or "socks4" or "socks5")
      --proxy-auth <auth>    Authenticate with HTTP or SOCKS proxy server
      --ssl                  Connect or listen with SSL
      --ssl-cert             Specify SSL certificate file (PEM) for listening
      --ssl-key              Specify SSL private key (PEM) for listening
      --ssl-verify           Verify trust and domain name of certificates
      --ssl-trustfile        PEM file containing trusted SSL certificates
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --version              Display Ncat's version information and exit

nc常用案例

TCP監聽測試

  • nc可作為server端192.168.10.11啟動一個tcp的監聽

nc -l 80

  • 客戶端測試方法:直接telnet該機器ip+埠

telnet 192.168.10.11 80
或:nmap 192.168.10.11 -p 80

UDP監聽測試

  • nc作為server端啟動一個udp的監聽

nc -lu 80

通過netstat可以看到udp協議已經監聽:

> # netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name   
udp        0      0 0.0.0.0:80      0.0.0.0:*                15401/nc  
  • 客戶端測試方法:(telnet只能測試tcp協議)

nc -vuz 192.168.10.11 80
(u表示udp埠,v表示可視化輸出,z表示掃描時不發送數據)

使用nc傳輸文件

使用nc傳輸文件不用scp或rsync那種輸入密碼的操作,當然也存在一定安全性。

例如:要把A機器上的一個sql文件發送到B機器上
(需要先開啟偵聽B機器埠,再到A機器發送數據到該埠)

步驟1,先在B機器上啟動一個接收文件的監聽,格式如下

nc -l 888 > zabbix.sql

步驟2,在A機器上往B機器的888埠發送數據,把下面sql包發送過去

nc 192.168.10.11 888 < zabbix.sql

也可通過nc傳輸目錄,但這裡不推薦使用,暫不舉例。

網路測試

這裡也不推薦使用nc,直接使用speedtest,簡單:

wget -O speedtest-cli //raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
./speedtest-cli

解決telnet 無法斷開問題

CTRL+]鍵,這時會強制退到telnet命令介面下,再輸入quit退出就行。