netcat 常用的幾個命令,可用於建立TCP/UDP連線
Netcat 或者叫 nc 是 Linux 下的一個用於除錯和檢查網路工具包。可用於建立 TCP/IP 連線,最大的用途就是用來處理 TCP/UDP 套接字。
這裡我們將透過一些例項來學習 netcat 命令。
1. 在伺服器-客戶端架構上使用 Netcat
netcat 工具可執行於伺服器模式,偵聽指定埠
1
|
$ nc -l 2389
|
然後你可以使用客戶端模式來連線到 2389 埠:
1
|
$ nc localhost 2389
|
現在如果你輸入一些文字,它將被髮送到伺服器端:
1
2
|
$ nc localhost 2389
HI, oschina
|
在伺服器的終端視窗將會顯示下面內容:
1
2
|
$ nc -l 2389
HI, oschina
|
2. 使用 Netcat 來傳輸檔案
netcat 工具還可用來傳輸檔案,在客戶端,假設我們有一個 testfile 檔案:
1
2
|
$ cat testfile
hello oschina
|
而在伺服器端有一個空檔名為 test
然後我們使用如下命令來啟用伺服器端:
1
|
$ nc -l 2389 > test
|
緊接著執行客戶端:
1
|
cat testfile | nc localhost 2389
|
然後你停止伺服器端,你可以檢視 test 內容就是剛才客戶端傳過來的 testfile 檔案的內容:
1
2
|
$ cat test
hello oschina
|
3. Netcat 支援超時控制
多數情況我們不希望連線一直保持,那麼我們可以使用 -w 引數來指定連線的空閒超時時間,該引數緊接一個數值,代表秒數,如果連線超過指定時間則連線會被終止。
伺服器:
1
|
nc -l 2389
|
客戶端:
1
|
$ nc -w 10 localhost 2389
|
該連線將在 10 秒後中斷。
注意: 不要在伺服器端同時使用 -w 和 -l 引數,因為 -w 引數將在伺服器端無效果。
4. Netcat 支援 IPv6
netcat 的 -4 和 -6 引數用來指定 IP 地址型別,分別是 IPv4 和 IPv6:
伺服器端:
1
|
$ nc -4 -l 2389
|
客戶端:
1
|
$ nc -4 localhost 2389
|
然後我們可以使用 netstat 命令來檢視網路的情況:
1
2
3
|
$ netstat | grep 2389
tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED
tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
|
接下來我們看看IPv6 的情況:
伺服器端:
1
|
$ nc -6 -l 2389
|
客戶端:
1
|
$ nc -6 localhost 2389
|
再次執行 netstat 命令:
1
2
3
|
$ netstat | grep 2389
tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED
tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
|
字首是 tcp6 表示使用的是 IPv6 的地址。
5. 在 Netcat 中禁止從標準輸入中讀取資料
該功能使用 -d 引數,請看下面例子:
伺服器端:
1
|
$ nc -l 2389
|
客戶端:
1
2
|
$ nc -d localhost 2389
Hi
|
你輸入的 Hi 文字並不會送到伺服器端。
6. 強制 Netcat 伺服器端保持啟動狀態
如果連線到伺服器的客戶端斷開連線,那麼伺服器端也會跟著退出。
伺服器端:
1
|
$ nc -l 2389
|
客戶端:
1
2
|
$ nc localhost 2389
^C
|
伺服器端:
1
2
|
$ nc -l 2389
$
|
上述例子中,但客戶端斷開時伺服器端也立即退出。
我們可以透過 -k 引數來控制讓伺服器不會因為客戶端的斷開連線而退出。
伺服器端:
1
|
$ nc -k -l 2389
|
客戶端:
1
2
|
$ nc localhost 2389
^C
|
伺服器端:
1
|
$ nc -k -l 2389
|
7. 配置 Netcat 客戶端不會因為 EOF 而退出
Netcat 客戶端可以透過 -q 引數來控制接收到 EOF 後隔多長時間才退出,該引數的單位是秒:
客戶端使用如下方式啟動:
1
|
nc -q 5 localhost 2389
|
現在如果客戶端接收到 EOF ,它將等待 5 秒後退出。
8. 使用 Netcat 來處理 UDP 協議
netcat 預設是使用 TCP 協議,但也支援 UDP,可使用 -u 引數來啟用 UDP 協議通訊。
伺服器端:
1
|
$ nc -4 -u -l 2389
|
客戶端:
1
|
$ nc -4 -u localhost 2389
|
這樣客戶端和伺服器端都使用了 UDP 協議,可透過 netstat 命令來檢視:
1
2
|
$ netstat | grep 2389
udp 0 0 localhost:42634 localhost:2389 ESTABLISHED
|
另外,還有一種方式也可傳送tcp資料:echo "7090909099999993*" > /dev/tcp/10.0.15.218/50000
參考連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31347383/viewspace-2127072/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TCP的連線建立2017-10-16TCP
- 最多能建立多少個 TCP 連線?2021-07-01TCP
- 12、Swoole 中 TCP、UDP 和長連線、短連線2020-06-29TCPUDP
- UDP Hole Puching技術:穿透防火牆建立UDP連線(轉)2007-08-13UDP穿透防火牆
- 理解 TCP(三):連線的建立和釋放2017-03-02TCP
- TCP連線是如何建立和終止的?2018-05-21TCP
- Python網路程式設計實現TCP和UDP連線2018-08-21Python程式設計TCPUDP
- Git的幾個常用命令2014-12-04Git
- 用於建立連線的命令選項(參考MySQL官方文件)2019-12-18MySql
- ? 抓包分析 TCP 建立和斷開連線的流程2019-03-31TCP
- 【網路協議】TCP連線的建立和釋放2014-06-09協議TCP
- tcp 連線2024-06-18TCP
- 幾個常用的網路診斷命令2020-12-22
- 【bash】關於 /dev/(tcp|udp)/${HOST}/${PORT}2024-05-24devTCPUDP
- 關於檢測TCP連線斷開2017-11-10TCP
- 系列TCP/IP協議-TCP建立與終止連線(012)2019-05-14TCP協議
- 第二篇:一個經典的比喻( 關於TCP連線API )2017-01-29TCPAPI
- TCP 和 UDP2019-03-03TCPUDP
- TCP和UDP2019-03-04TCPUDP
- TCP vs UDP2021-03-25TCPUDP
- UDP與TCP2020-10-21UDPTCP
- TCP與UDP2024-07-12TCPUDP
- TCP建立連線三次握手和釋放連線四次握手2016-09-14TCP
- TCP 連線管理2018-12-13TCP
- 幾個常用linux命令筆記2012-12-24Linux筆記
- 幾個常用的linux效能監控命令2018-04-12Linux
- 安全界瑞士軍刀--Netcat常用命令2020-11-29
- 【JDBC】使用OracleDataSource建立連線池用於連線Oracle2021-04-08JDBCOracle
- 限制單個IP併發TCP連線的方法2022-10-27TCP
- MQTT是TCP還是UDP?TCP與UDP區別2023-02-11MQQTTCPUDP
- 聊聊UDP、TCP和實現一個簡單的JAVA UDP小Demo2020-05-24UDPTCPJava
- linux 建立連線命令 ln -s 軟連結2016-02-16Linux
- tcp的半連線攻擊和全連線攻擊--TCP DEFER ACCEPT2019-02-02TCP
- 建立幾個常用table展示方式外掛2016-09-14
- Spring連線資料庫的幾種常用的方式2016-12-11Spring資料庫
- 8 個實用的 Linux netcat 命令示例2012-11-15Linux
- TCP連結的建立和釋放2020-11-29TCP
- TCP與UDP的區別2020-11-15TCPUDP