[netcat][2]是網絡工具中的瑞士軍刀,它能通過TCP和UDP在網絡中讀寫數據。
`netcat`所做的就是在兩臺電腦之間建立鏈接并返回兩個數據流,在這之后所能做的事就看你的想像力了。你能建立一個`服務器`,`傳輸文件`,與朋友聊天,傳輸流媒體或者用它作為其它協議的獨立客戶端。
## 安裝
### linux
~~~
yum install -y netcat
apt-get install netcat
~~~
### windows
[下載][1]
### mac
~~~
brew install netcat
~~~
## 選項
~~~
-m, --max-conns <n> # 最大并發數
-o, --output <filename> # 導出到文件
-x, --hex-dump <filename> # 導出到文件
-l, --listen # 監聽端口等待連接
-k, --keep-open # 保持不退出
-w, --wait <time> # 超時時間
--allow # 允許的客戶端,可以使網段 192.168.0.0/24
~~~
## 實例
### 端口掃描
端口掃描經常被系統管理員和黑客用來發現在一些機器上開放端口,幫助他們識別系統中的漏洞。
~~~
nc -z -v -n 172.31.100.7 21-25
~~~
可以運行在TCP或者UDP模式,默認是TCP,-u參數調整為udp.
z 參數告訴netcat使用0 IO,指的是一旦連接關閉,不進行數據交換
v 參數指使用冗余選項(譯者注:即詳細輸出)
n 參數告訴netcat 不要使用DNS反向查詢IP地址的域名
這個命令會打印21到25 所有開放的端口。Banner是一個文本,Banner是一個你連接的服務發送給你的文本信息。當你試圖鑒別漏洞或者服務的類型和版本的時候,Banner信息是非常有用的。但是,并不是所有的服務都會發送banner。
一旦你發現開放的端口,你可以容易的使用netcat 連接服務抓取他們的banner。
### Chat Server
假如你想和你的朋友聊聊,有很多的軟件和信息服務可以供你使用。但是,如果你沒有這么奢侈的配置,比如你在計算機實驗室,所有的對外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要郁悶了,netcat提供了這樣一種方法,你只需要創建一個Chat服務器,一個預先確定好的端口,這樣子他就可以聯系到你了。
Server
~~~
$nc -l 1567
~~~
netcat 命令在1567端口啟動了一個tcp 服務器,所有的標準輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展示。
Client
~~~
$nc 172.31.100.7 1567
~~~
不管你在機器B上鍵入什么都會出現在機器A上。
### 文件傳輸
當你只是需要臨時或者一次傳輸文件,假設,你想要傳一個文件file.txt 從A 到B。A或者B都可以作為服務器或者客戶端,以下,讓A作為服務器,B為客戶端。
~~~
# 服務端A
HOST1$ ncat -l 9899 > outputfile
# 客戶端B
HOST2$ ncat HOST1 9899 < inputfile
~~~
這里我們創建了一個服務器在A上并且重定向netcat的輸入為文件file.txt,那么當任何成功連接到該端口,netcat會發送file的文件內容。
沒有必要創建文件源作為Server,我們也可以相反的方法使用。像下面的我們發送文件從B到A,但是服務器創建在A上,這次我們僅需要重定向netcat的輸出并且重定向B的輸入文件。
~~~
# 服務端
HOST1$ ncat -l 9899 < inputfile
# 客戶端
HOST2$ ncat HOST1 9899 > outputfile
~~~
### 加密通過網絡發送的數據
如果你擔心你在網絡上發送數據的安全,你可以在發送你的數據之前用如mcrypt的工具加密。
服務端
~~~
nc localhost 20000 | mcrypt --flush --bare -F -q -d -m ecb
~~~
使用mcrypt工具加密數據。
客戶端
~~~
mcrypt --flush --bare -F -q -m ecb | nc -l 20000
~~~
使用mcrypt工具解密數據。以上兩個命令會提示需要密碼,確保兩端使用相同的密碼。
### 流視頻
雖然不是生成流視頻的最好方法,但如果服務器上沒有特定的工具,使用netcat,我們仍然有希望做成這件事。
服務端
~~~
$cat video.avi | nc -l 1567
~~~
這里我們只是從一個視頻文件中讀入并重定向輸出到netcat客戶端
~~~
$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
~~~
這里我們從socket中讀入數據并重定向到mplayer。
### 克隆一個設備
如果你已經安裝配置一臺Linux機器并且需要重復同樣的操作對其他的機器,而你不想在重復配置一遍。不在需要重復配置安裝的過程,只啟動另一臺機器的一些引導可以隨身碟和克隆你的機器。
克隆Linux PC很簡單,假如你的系統在磁盤/dev/sda上
Server
~~~
$dd if=/dev/sda | nc -l 1567
~~~
Client
~~~
$nc -n 172.31.100.7 1567 | dd of=/dev/sda
~~~
dd是一個從磁盤讀取原始數據的工具,我通過netcat服務器重定向它的輸出流到其他機器并且寫入到磁盤中,它會隨著分區表拷貝所有的信息。但是如果我們已經做過分區并且只需要克隆root分區,我們可以根據我們系統root分區的位置,更改sda 為sda1,sda2.等等。
### 指定源地址
假設你的機器有多個地址,希望明確指定使用哪個地址用于外部數據通訊。我們可以在netcat中使用-s選項指定ip地址。
服務器端
~~~
$nc -u -l 1567 < file.txt
~~~
客戶端
~~~
$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt
~~~
該命令將綁定地址172.31.100.5。
### socket
~~~
# 服務端
ncat -U ~/unixsock
# 客戶端
ncat -l -U ~/unixsock
~~~
### 加密所有流量
首先NCAT并不是Linux自帶的一款工具,Ncat包含于nmap工具中,用來彌補nc明文連接傳輸通道的不足!
A:kali 192.168.14.23 B:ubuntu 192.168.14.20
A:kali作為服務器端進行偵聽端口,allow參數即是允許那個ip連接,-ssl進行管道傳輸加密!
~~~
ncat -c bash --allow 192.168.14.20 -vnl 333 --ssl
B端作為接收端:
B:ubuntu
ncat -nv 192.168.14.23 333 --ssl
~~~
通過ncat建立的遠程連接與nc建立的遠程連接是有本質區別的,ncat建立一起已經進行了秘鑰的交換,并且在此后的傳輸通道也是經過加密的哦!此時即是有人來嗅探也是無濟于事的ssl還是挺有保障的!nc所能實現的所有功能在ncat上都能實現!
[1]:https://joncraton.org/files/nc111nt_safe.zip
[2]:http://netcat.sourceforge.net/
- 目錄
- 離散的內容
- IO模型
- 網卡綁定
- ssh
- 硬件測試
- 硬件
- limits
- 網絡流量
- 硬盤IO
- 硬盤
- tmux
- 主機名和域名
- http_proxy
- iptables
- 內核參數
- 塊設備和字符設備
- 內存
- 虛擬內存并非交換分區
- 網絡延時
- 概念
- 多核壓縮
- linux基礎
- SSH協議
- 軟件管理
- yum
- 制作本地源 yum系列
- 制作本地源 apt系列
- apt
- 在 Linux 中移除從源代碼安裝的程序的一種簡單的方法
- 其他
- 源碼編譯和二進制安裝后更改配置
- DNS
- bind
- 守護進程
- 特殊權限
- limit.conf配置
- 網絡
- shell-ok
- 變量ok
- 數組ok
- 系統變量和環境變量
- 運算符和計算-ok
- 條件測試-ok
- 選擇-ok
- shell循環-ok
- 輸出echo和printf-ok
- 技巧-ok
- pre-web
- http協議
- web服務器
- Apache
- apache安裝
- yum安裝
- 二進制安裝
- 編譯安裝
- httpd命令
- 運行 監控apache
- apache配置文件
- 常用配置
- MPM多處理模塊
- 編譯模塊
- apache模塊
- apache核心模塊
- apache標準模塊
- apache第三方模塊
- 虛擬主機
- 1
- CGI-FastCGI-SSI
- 別名和重定向
- apache應用
- 301重定向
- apache防盜鏈
- http轉化為https
- 訪問時間段控制
- 控制訪問目錄
- 限制指定USER_AGENT
- 不同客戶端訪問不同網頁
- apache黑名單
- httpd之禁止解析php
- 不記錄css/js/img的訪問日志
- 瀏覽器端靜態緩存
- apache訪問日志自動切割
- order-require
- 壓縮傳輸
- httpd-ssl
- apache代理
- 正向代理
- 反向代理
- apache調優
- httpd壓力測試工具ab
- CGI測試
- php
- php原理
- httpd和php的結合方式
- php yum安裝之DSO模式
- php 編譯安裝之DSO模式
- php-fpm詳解
- php yum安裝之php-fpm模式
- php 編譯安裝之FastCGI模式
- php擴展之mysql
- php擴展之gd
- php擴展之pcntl
- php擴展之xcache
- php擴展之ZendGuardLoader
- phpMyAdmin
- wordpress
- 數據庫-mysql
- 數據庫原理
- mysql數據庫原理
- mysql源碼編譯安裝
- mysql二進制包安裝
- mysql命令行工具
- 更改密碼
- 數據庫授權grant
- mysql日志
- 命令
- 常用
- 小命令大作為
- awk 報告生成器
- 網絡命令
- 命令查找
- 壓縮歸檔命令
- 文件管理
- 文件管理命令
- 文件查看命令
- 目錄管理命令
- 用戶管理命令
- 用戶權限管理
- curl
- cheat
- chrony
- command
- crontab任務計劃
- cut
- date
- dd
- df
- echo
- find
- grep
- hash
- iftop
- kill pkill killall
- ls
- lsmod和modprobe
- lsof
- man
- mkpasswd
- mount
- mtr
- netstat
- nmap
- nc
- NTP
- passwd
- rm
- rdate
- pv
- sar系統活動情況報告
- sed文本處理命令
- setup
- screen
- shutdown
- sort 命令
- sudo
- tcpdump
- top
- uniq
- wget
- who
- xargs
- 監控
- zabbix郵件報警
- Redis
- redis安裝
- redis數據類型和操作方法
- redis持久化和配置
- redis主從配置
- php連接redis
- redis實現session共享
- 安裝測試
- redis設置密碼
- ELK日志分析系統
- elasticsearch
- logstash
- logstash插件
- filebeat日志收集
- kibana
- jenkins
- jenkins安裝與配置
- 案例1
- 案例2
- 案例3
- 代碼倉庫之svn
- svn服務端配置
- 常用操作
- svn備份
- LB集群
- LVS負載均衡集群
- ipvsadm使用方法
- LVS調度方法
- NAT原理
- NAT實踐
- DR原理
- DR實踐
- TUN原理
- LVS持久連接
- HA集群
- HPC集群
- 共享存儲
- ftp協議
- vsftpd
- NFS
- 網站架構發展
- 文件同步
- rsync基本用法
- rsync安裝和使用_拉取模式
- lsyncd安裝和用法
- zabbix
- zabbix服務端安裝
- zabbix客戶端安裝
- zabbix編譯安裝
- zabbix監控tomcat
- zabbix監控mysql
- gitlab
- supervisor
- nsq
- ruby
- nodejs
- consul
- mesos
- zookeeper
- rwho
- 對象存儲
- 工具
- rclone
- minio
- linux 性能調優
- CPU
- 第一部分 CPU
- 安全