查看遠程端口是否開放

linux下ncat命令可以查看遠端設備是否開放某個端口

nc -uv xxx.xxx.xxx.xxx 1812
使用udp協議查看xxx.xxx.xxx.xxx的1812端口是否開放
提示connected to xxx.xxx.xxx.xxx就是已經開放

-u udp
-v 詳細顯示信息
不加u默認是TCP協議


nmap-ncat.x86_64版nc/ncat

nc/ncat所做的就是在兩臺電腦之間建立鏈接並返回兩個數據流,在這之後所能做的事就看你的想像力了。你能建立一個服務器,傳輸文件,與朋友聊天,傳輸流媒體或者用它作爲其它協議的獨立客戶端。
centos 7下安裝nc
yum install nmap-ncat.x86_64 -y
[root@localhost ~]# rpm -ql nmap-ncat
/usr/bin/nc
/usr/bin/ncat
...

常用參數選項

nc -h查看
-4 使用IPV4
-6 使用IPV6
-c, --sh-exec <command> 接收到的命令通過command(例如/bin/bash)執行
-e, --exec <command> 和-c差不多
--lua-exec <filename> 接收到的數據通過腳本filename執行
-m, --max-conns <n> 最大併發連接數(單獨開啓不生效,需配合--keep-open/--broker使用)
-d, --delay <time> 讀寫收發間隔時間
-o, --output <filename> 將會話數據轉儲到文件
-i, --idle-timeout <time> 讀寫超時時間
-p, --source-port port 指定連接使用的源端口號(client端使用)
-s, --source addr 客戶端指定連接服務器使用的ip(client端使用)
-l, --listen 綁定和監聽接入連接(server端使用)
-k, --keep-open 在監聽模式中接受多個連接(配合-m使用)
-n, --nodns 不使用DNS解析主機名
-t, --telnet 響應telnet連接
-u, --udp 使用udp協議,默認tcp
-v, --verbose 顯示詳細信息
-w, --wait <time> 連接超時時間
--allow 允許指定主機連接
--allowfile 允許指定文件內的主機連接
--deny 拒絕指定主機連接
--denyfile 拒絕指定文件內的主機連接
--broker 啓用代理模式
--proxy <addr[:port]> 指定代理主機ip和port
--proxy-type <type> 指定代理類型("http" or "socks4")
--proxy-auth <auth> 代理身份驗證

實例:

主機A:192.168.1.130

主機B:192.168.1.120

1、chat server:簡單傳輸數據服務器

假如你想和你的朋友聊聊,有很多的軟件和信息服務可以供你使用。但是,如果你沒有這麼奢侈的配置,比如你在計算機實驗室,所有的對外的連接都是被限制的,你怎樣和整天坐在隔壁房間的朋友溝通那?不要鬱悶了,netcat提供了這樣一種方法,你只需要創建一個Chat服務器,一個預先確定好的端口,這樣子他就可以聯繫到你了。

Server A

複製代碼
[root@localhost tmp]# ncat -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34356.
hello world!!!
複製代碼

nc/ncat 命令在8081端口啓動了一個tcp 服務器,所有的標準輸出和輸入會輸出到該端口。輸出和輸入都在此shell中展示。

Client B

[root@localhost ~]# nc -v 192.168.1.130 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
hello world!!!
不管你在機器B上鍵入什麼都會出現在機器A上。

2、文件傳輸

大部分時間中,我們都在試圖通過網絡或者其他工具傳輸文件。有很多種方法,比如FTP,SCP,SMB等等,但是當你只是需要臨時或者一次傳輸文件,真的值得浪費時間來安裝配置一個軟件到你的機器上嘛。假設,你想要傳一個文件file.txt 從A 到B。A或者B都可以作爲服務器或者客戶端,以下,讓A作爲服務器,B爲客戶端。

Server A

[root@localhost tmp]# ncat -v -lp 8081 < file.txt
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34358.
Client B

複製代碼
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
[root@localhost ~]# nc -v 192.168.1.130 8081 > file.txt
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
^C
[root@localhost ~]# ll
total 40220
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 41180832 Sep 19 14:33 file.txt
複製代碼
這裏我們創建了一個服務器在A上並且重定向netcat的輸入爲文件file.txt,那麼當任何成功連接到該端口,netcat會發送file的文件內容。

在客戶端我們重定向輸出到file.txt,當B連接到A,A發送文件內容,B保存文件內容到file.txt.

沒有必要創建文件源作爲Server,我們也可以相反的方法使用。像下面的我們發送文件從B到A,但是服務器創建在A上,這次我們僅需要重定向netcat的輸出並且重定向B的輸入文件。

B作爲Server

Server A

[root@localhost tmp]# ncat -v -lp 8081 > file.txt
...
Client B

[root@localhost ~]# nc -v 192.168.1.130 8081 < file.txt
3、目錄傳輸

發送一個文件很簡單,但是如果我們想要發送多個文件,或者整個目錄,一樣很簡單,只需要使用壓縮工具tar,壓縮後發送壓縮包。

如果你想要通過網絡傳輸一個目錄從A到B。

Server A

複製代碼
[root@localhost tmp]# tar cvf - nc_dir | nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
nc_dir/
nc_dir/an
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34362.
nc_dir/yum.log
複製代碼
Client B

複製代碼
[root@localhost ~]# ll
total 40220
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 41180832 Sep 19 14:33 file.txt
[root@localhost ~]# nc -nv 192.168.1.130 8081 | tar xvf -
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
nc_dir/
nc_dir/an
nc_dir/yum.log^C
[root@localhost ~]# ll
total 40220
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 41180832 Sep 19 14:33 file.txt
drwxr-xr-x. 2 root root 31 Sep 20 2017 nc_dir
複製代碼
這裏在A服務器上,我們創建一個tar歸檔包並且通過-在控制檯重定向它,然後使用管道,重定向給netcat,netcat可以通過網絡發送它。

在客戶端我們下載該壓縮包通過netcat 管道然後打開文件。

如果想要節省帶寬傳輸壓縮包,我們可以使用bzip2或者其他工具壓縮。

通過bzip2壓縮

Server A

複製代碼
[root@localhost tmp]# tar cvf - nc_dir | bzip2 -z | nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
nc_dir/
nc_dir/an
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34372.
nc_dir/yum.log
複製代碼
使用bzip2解壓

Client B

複製代碼
[root@localhost ~]# ll
total 40220
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 41180832 Sep 19 14:33 file.txt
[root@localhost ~]# nc -nv 192.168.1.130 8081 | bzip2 -d | tar xvf -
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
nc_dir/
nc_dir/an
nc_dir/yum.log^C
[root@localhost ~]# ll
total 40220
-rw-------. 1 root root 1238 Sep 19 12:19 anaconda-ks.cfg
-rw-r--r--. 1 root root 41180832 Sep 19 14:33 file.txt
drwxr-xr-x. 2 root root 31 Sep 20 2017 nc_dir
複製代碼
4、加密你通過網絡發送的數據

如果你擔心你在網絡上發送數據的安全,你可以在發送你的數據之前用如mcrypt的工具加密。

服務端 A

複製代碼
[root@localhost tmp]# mcrypt --flush --bare -F -q -m ecb < file.txt | nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:

Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34392.
複製代碼
使用mcrypt工具加密數據。

客戶端 B

複製代碼
[root@localhost tmp]# ll
total 402160
-rw-r--r--. 1 root root 411808322 Sep 19 14:56 test.txt
[root@localhost tmp]# nc 192.168.1.130 8081 | mcrypt --flush --bare -F -q -d -m ecb > file.txt
Enter passphrase:
^C
[root@localhost tmp]# ll
total 442376
-rw-r--r--. 1 root root 41180832 Sep 19 15:13 file.txt
-rw-r--r--. 1 root root 411808322 Sep 19 14:56 test.txt
複製代碼
使用mcrypt工具解密數據。

以上兩個命令會提示需要密碼,確保兩端使用相同的密碼。

這裏我們是使用mcrypt用來加密,使用其它任意加密工具都可以。

5、打開一個shell

我們已經用過遠程shell-使用telnet和ssh,但是如果這兩個命令沒有安裝並且我們沒有權限安裝他們,我們也可以使用netcat創建遠程shell。

假設你的netcat支持 -c -e 參數(默認 netcat)

Server A

[root@localhost tmp]# nc -v -c /bin/bash -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34404.
Client B

複製代碼
[root@localhost tmp]# nc -v 192.168.1.130 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0a:cb:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.130/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::21af:eea9:759a:962f/64 scope link
valid_lft forever preferred_lft forever
複製代碼
這裏我們已經創建了一個netcat服務器並且表示當它連接成功時執行/bin/bash

假如netcat 不支持-c 或者 -e 參數(openbsd netcat),我們仍然能夠創建遠程shell

Server A

[root@server-A ~]# mkfifo /tmp/tmp_fifo
[root@server-A ~]# cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -v -lp 8081 > /tmp/tmp_fifo
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
這裏我們創建了一個fifo文件,然後使用管道命令把這個fifo文件內容定向到shell 2>&1中。是用來重定向標準錯誤輸出和標準輸出,然後管道到netcat 運行的端口8081上。至此,我們已經把netcat的輸出重定向到fifo文件中。

說明:

從網絡收到的輸入寫到fifo文件中

cat 命令讀取fifo文件並且其內容發送給bash命令

bash命令進程受到輸入並把它寫回到netcat。

netcat 通過網絡發送輸出到client

至於爲什麼會成功是因爲管道使命令平行執行,fifo文件用來替代正常文件,因爲fifo使讀取等待而如果是一個普通文件,cat命令會盡快結束並開始讀取空文件。

在客戶端僅僅簡單連接到服務器

Client B

複製代碼
[root@client-B ~]# nc 192.168.1.130 8081
[root@server-A ~]# ip add
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0a:cb:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.130/24 brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::21af:eea9:759a:962f/64 scope link
valid_lft forever preferred_lft forever
[root@server-A ~]#
複製代碼
你會得到一個shell提示符在客戶端

反向shell

反向shell是指在客戶端打開的shell。反向shell這樣命名是因爲不同於其他配置,這裏服務器使用的是由客戶提供的服務。

服務端 A

複製代碼
[root@server-A ~]# nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:34414.
ls
anaconda-ks.cfg
file.txt
nc_dir
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b9:7e:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic ens33
valid_lft 7170sec preferred_lft 7170sec
inet6 fe80::b95d:60d:d901:d271/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b9:7e:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.120/24 brd 192.168.1.255 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::2812:38ee:6773:1a7c/64 scope link
valid_lft forever preferred_lft forever
複製代碼
在客戶端,簡單地告訴netcat在連接完成後,執行shell。

客戶端 B

[root@client-B ~]# nc -v 192.168.1.130 8081 -c /bin/bash
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
現在,什麼是反向shell的特別之處呢
反向shell經常被用來繞過防火牆的限制,如阻止入站連接。

6、指定源端口

假設你的防火牆過濾除25端口外其它所有端口,你需要使用-p選項指定源端口。

服務器端 A

[root@server-A ~]# nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.120.
Ncat: Connection from 192.168.1.120:8082.
客戶端 B

[root@client-B ~]# nc -v 192.168.1.130 8081 -p 8082
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
使用1024以內的端口需要root權限。

該命令將在客戶端開啓25端口用於通訊,否則將使用隨機端口。

7、指定源地址

假設你的機器有多個地址,希望明確指定使用哪個地址用於外部數據通訊。我們可以在netcat中使用-s選項指定ip地址。

服務器端

[root@server-A ~]# nc -v -lp 8081
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8081
Ncat: Listening on 0.0.0.0:8081
Ncat: Connection from 192.168.1.106.
Ncat: Connection from 192.168.1.106:44694.
客戶端 B

複製代碼
[root@localhost log]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b9:7e:94 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic ens33
valid_lft 6803sec preferred_lft 6803sec
inet6 fe80::b95d:60d:d901:d271/64 scope link
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b9:7e:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.120/24 brd 192.168.1.255 scope global ens34
valid_lft forever preferred_lft forever
inet6 fe80::2812:38ee:6773:1a7c/64 scope link
valid_lft forever preferred_lft forever
複製代碼
[root@client-B ~]# nc -v 192.168.1.130 8081 -s 192.168.1.106
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.1.130:8081.
該命令將綁定地址192.168.1.106。

這僅僅是使用netcat的一些示例。

其它用途有:

使用-t選項模擬Telnet客戶端,
HTTP客戶端用於下載文件,
連接到郵件服務器,使用SMTP協議檢查郵件,
使用ffmpeg截取屏幕並通過流式傳輸分享,等等。其它更多用途。

簡單來說,只要你瞭解協議就可以使用netcat作爲網絡通訊媒介,實現各種客戶端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章