NetCat教程


NetCat

by Jian Lee

簡介

使用

隱藏命令行參數

正/反向域名解析

參數詳解

案例

監聽端口(制作蜜罐)

端口掃描

ftp 服務器

兩台服務器文件校驗

使用注意

簡介

使用

最簡單的使用: ”nc 主機名/IP 端口號/服務名",只要甲主機打開了端口(任何對外服務的端口),乙主機就可以使用nc命令連接這個端口。比如nmap查看到172.16.70.140開了22端口,通常這是sshd的服務端口,我們nc上去看看:

# nc 172.16.70.140 22

SSH-2.0-OpenSSH_4.3

 

ssh的版本號都顯示了,不過一般我們做不了什么事情,但是現在對方的 sshd真在等待我們的輸入,如果你能正確和sshd“交流”,那什么都可以做了^_^。

使用主機名也可以,這次我們加一個 -v 參數:

# nc -v g.cn 80

Connection to g.cn 80 port [tcp/http] succeeded!

 

端口號我們可以不用數字,用 /etc/services 里面的服務名來代替知名端口號,好像也不是所有的系統自帶nc都支持:

# nc dev3-140  ssh

SSH-2.0-OpenSSH_4.3

 

隱藏命令行參數

如果沒有提供命令行參數,NetCat會提示你從標准輸入來輸入命令參數,然后NetCat會在內部解析輸入。用這種辦法輸入命令式參數,可以用來防止借助“ps”來查看你的命令行參數。下面是一個示例:

# nc

Cmd line: -l 1234

 

此時我們在系統上用ps命令查看nc的進程,是看不到nc的參數的。如果我們直接在命令行寫上參數,ps就能看到命令行參數了。

# nc -l 1234

// 上面命令我們一般能用ps命令查看到類似下面的信息。

# ps aux|grep nc

root      7332  0.0  0.0   1772   536 pts/4    S+   10:38   0:00 nc -l 1234

正/反向域名解析

主機參數可以是一個名字或一個IP地址。如果-n出現,則它接受IP地址,而不再對計算機的名字或域名進行解析。如果沒有-n,但加上-v,則 NetCat可進行正/反向域名解析,並警告the all-too-common problem of mismatched name in DNS。這會耗費稍多一點時間,但在某些情況下會有用處。如,你想知道某個IP的主機名,NetCat可省卻你手工查找的時間。

// 甲機器使用參數運行nc:

# /data/bin/nc -l 1234

... 此處是等待

 

// 乙機器連接:

# nc -v dev3-168 1234

Connection to dev3-168 1234 port [tcp/search-agent] succeeded!

... 此處是等待

 

// 接着在乙機器輸入任何字符串並按Enter鍵,甲機器都能收到。

上面dev3-168是我的域中一個機器名,-v參數和-n參數都對主機名解析。都是-v參數可以通過ip反向解析出主機名。示例:

// 很多系統自帶nc的-v參數不能做到這一點。

# nc -v 172.16.70.140 1234

dev3-140.dev.cn.tlan [172.16.70.140] 1234 (?) open

 

參數詳解

顯示詳細連接信息

-v 參數可以將一些關於連接建立信息輸出到標准錯誤。-v參數多出現幾次,則顯示的信息會更多一些。如果-v參數沒有出現,則NetCat將默默地工作,至到出現錯誤為止。

# nc -vvv g.cn 80

Connection to g.cn 80 port [tcp/http] succeeded!

 

設定建立鏈接時間

-w

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 1   //1秒后斷開連接

Connection to g.cn 80 port [tcp/http] succeeded!

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 2 //2秒

Connection to g.cn 80 port [tcp/http] succeeded!

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 2 -w 3   // 3秒,覆蓋前面的2秒設置

Connection to g.cn 80 port [tcp/http] succeeded!

 

綁定端口

-p 端口 " 來綁定本地端口。除了因權限限制或端口已經使用外,-p可以綁定任何端口。Root用戶可以綁定保留的1024以內的端口。如果不用-p指定端口,則使用系統給定的未使用的端口。(-p功能在客戶端狀態也可以使用,-s功能並不是在所有的平台上都可用)

作為服務器

-l 參數可以使NetCat以服務器狀態運行。 ”nc -l -p 1234 [remote hostname] [remote port]” 可以用來指定入連的主機和端口,如果申請連接的主機或端口不符指定,則會斷開連接。

// 172.16.70.168上運行nc監聽本地80端口

// 遠程client機器指定ip為172.16.70.140,使用的鏈接端口是35

# nc -l -p 80 172.16.70.140 35

 

// 只有172.16.70.140上運行下面命令才能鏈接到168機器上

# nc 172.16.70.168 80 -p 35

執行指定程序

-e 參數后面跟一可執行程序的名稱,當一個連接(入或出)被建立時,這個程序被運行。尤其當NetCat以服務器端運行時,-e參數使其有點象inetd了,只是只能運行一個進行而已。需要說明的是,-e后的程序不能從NetCat的命令行接收參數,如果有參數要傳遞,可能需要一個腳本。通常linux的發行版是不帶這個參數支持的,可以自己編譯,編譯時置-DGAPING_SECURITY_HOLE,則-e參數被NetCat支持。

// 172.16.70.168作為一個服務器,當172.16.70.140的端口35鏈接此140時

// 執行 /bin/sh 命令

# nc

Cmd line: -l -p 80 172.16.70.140 35 -e /bin/sh

 

// 172.16.70.140上執行下面命令鏈接上去

# nc 172.16.70.168 80 -p 35

ls   ---> 這是傳遞給172.16.70.168上/bin/sh的指令

Adobe

nc_httpd.log

上面 -e 參數用法是在指定主機鏈接進來執行一個程序,相對於服務器的作用,我們也可以在鏈接的時候使用 -e 參數,相對於client端:

// 172.16.70.140 上執行

# nc -l 80

 

// 172.16.70.168 上執行

# nc 172.16.70.140 80 -e /bin/dmesg

其實 -e 參數在哪一個機器都可以執行,這里面有一個基本原理,netcat工具只是在網絡兩端建立一個 TCP/UDP 同路。兩邊的關系都是對等的。

// 172.16.70.24 上執行

# nc -l 1234

 

// 172.16.70.168 上執行

# nc -e /bin/bash 172.16.70.24 1234

 

//這樣在172.16.70.24上輸入的沒一個串字符都是

//172.16.70.168 上的 /bin/bash 的輸入。也就是執行bash命令了。

當做telnetd服務器

-t 參數通常在linux發行版自帶的nc都是支持的,此時NetCat可以登錄到一個telnetd服務器,並提供相關的握手應答,至到出現登錄提示符。

// 172.16.70.140 上

# nc -l 80 -t

 

// 172.16.70.168 上可以

# nc 172.16.70.140 80

 

// 也可以

# telnet 172.16.70.140 80

案例

監聽端口(制作蜜罐)

很多時候我們可以讓nc監聽一個端口來達到制作蜜罐的作用。例如我們在 172.16.70.140 機器上啟動nc監聽80端口,然后在172.16.70.168 上用firefox打開地址:http://172.16.70.140 ,這樣140機器的nc端可以得到168試圖連接的信息:

# nc -l 80

GET / HTTP/1.1

Host: 172.16.70.140

User-Agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.5

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

有寫nc版本可以使用 -o 參數保存信息到一個文件中。不過我們可以用 shell重定向來做。只是建立的是文本文件而已。

// 172.16.70.140 上運行

# nc -l 80 &> nc_httpd.log &

 

// 172.16.70.168 上運行

# w3m http://dev3-140

 

// 172.16.70.140 上可以查看 nc_httpd.log

# cat nc_httpd.log

GET / HTTP/1.0

User-Agent: w3m/0.5.2

Accept: text/html, text/*;q=0.5, image/*, application/*, multipart/*, message/*, audio/*

Accept-Encoding: gzip, compress, bzip, bzip2, deflate

Accept-Language: en;q=1.0

Host: dev3-140

不過注意,上面參數后台運行nc的時候,進程用手動kill掉。

端口掃描

// 掃描172.16.70.24的20至30端口

#  nc -z  -v -v 172.16.70.24 20-30

ftp 服務器

前面的nc建立鏈接除了 -e 參數指定運行程序,一般都是從標准輸入獲取輸入。被鏈接的主機將收到的信息輸出到標准輸出。nc可以接受重定向數據,如果使用重定向技術,就可以把nc當做服務器使用了:

// 172.16.70.168 上監聽鏈接(相對於server)

# nc -l -p 80 > passwd

 

// 172.16.70.140 上鏈接(相對於client)

# nc 172.16.70.168 80 < /etc/passwd

// 趕快去168看看,passwd是不是已經傳過去了?

可以打包壓縮傳輸,用條管道而已:

// 172.16.70.168 接收nc的輸入給tar程序

# nc -l -p 80 | tar xzf -

 

// 172.16.70.140 用tar打包壓縮e1000e目錄傳遞給nc

# tar cjf - e1000e |  nc 172.16.70.168 80

如果客戶端沒有nc怎么辦?下面一個示例:

// 172.16.70.24 的機器上運行

# nc -l http < /var/log/messages

上面 172.16.70.24 運行了nc,監聽80(http)端口的請求,把 /var/log/messages 作為標准輸入。現在我們可以在 172.16.70.168 上使用firefox打開網址: http://172.16.70.24 就可以看到24機器上的 messages 日志了。

兩台服務器文件校驗

// 172.16.70.216

# find /etc/rc.d/ -type f|xargs md5sum|nc -l 1234

 

// 172.16.70.24

# nc 172.16.70.216 1234|md5sum -c -|grep -v OK

這樣可比較的東西就多了,例如下面命令檢查機器上的sid位:

find / -xdev -type f -user root \( -perm -4000 -o -perm -2000 \)

使用注意

netcat 一般的linux發行版本都自帶,通常都叫 nc 。不過自帶的 netcat 功能不完全,比如 -e的參數不支持,而且一些命令的使用也不一樣。GNU的nc功能比較全面,可以自己編譯。

網上介紹 netcat 的使用文章也很多,雖然這個工具原理是如此的簡單,但是在Unix/Linux 環境中它能發揮的作用遠遠超過我們的想像。網上的很多方法並不一定能在你的當前系統中運行,主要是 netcat 的版本不太一樣。也有些經過多次轉貼,已經有錯誤了。這時,你應該仔細查看你的nc 支持選項。使用 "nc -h" 查看,下面兩個版本的 nc 支持選項差別還是很大的:

下面是我的ubuntu系統上 netcat-openbsd 包中的 nc 用法:

# nc -h

OpenBSD netcat (Debian patchlevel 1.89-3ubuntu1)

usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]

          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]

          [-x proxy_address[:port]] [hostname] [port[s]]

        Command Summary:

                -4              Use IPv4

                -6              Use IPv6

                -D              Enable the debug socket option

                -d              Detach from stdin

                -h              This help text

                -i secs         Delay interval for lines sent, ports scanned

                -k              Keep inbound sockets open for multiple connects

                -l              Listen mode, for inbound connects

                -n              Suppress name/port resolutions

                -P proxyuser    Username for proxy authentication

                -p port         Specify local port for remote connects

                -q secs         quit after EOF on stdin and delay of secs (-1 to not quit)

                -r              Randomize remote ports

                -S              Enable the TCP MD5 signature option

                -s addr         Local source address

                -T ToS          Set IP Type of Service

                -C              Send CRLF as line-ending

                -t              Answer TELNET negotiation

                -U              Use UNIX domain socket

                -u              UDP mode

                -v              Verbose

                -w secs         Timeout for connects and final net reads

                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"

                -x addr[:port]  Specify proxy address and port

                -z              Zero-I/O mode [used for scanning]

        Port numbers can be individual or ranges: lo-hi [inclusive]

RHEL 中的 nc 也是openbsd版本的:

# nc -h

usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]

          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]

          [-x proxy_address[:port]] [hostname] [port[s]]

        Command Summary:

                -4              Use IPv4

                -6              Use IPv6

                -D              Enable the debug socket option

                -d              Detach from stdin

                -h              This help text

                -i secs         Delay interval for lines sent, ports scanned

                -k              Keep inbound sockets open for multiple connects

                -l              Listen mode, for inbound connects

                -n              Suppress name/port resolutions

                -p port         Specify local port for remote connects

                -r              Randomize remote ports

                -s addr         Local source address

                -T ToS          Set IP Type of Service

                -C              Send CRLF as line-ending

                -t              Answer TELNET negotiation

                -U              Use UNIX domain socket

                -u              UDP mode

                -v              Verbose

                -w secs         Timeout for connects and final net reads

                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"

                -x addr[:port]  Specify proxy address and port

                -z              Zero-I/O mode [used for scanning]

        Port numbers can be individual or ranges: lo-hi [inclusive]

ubuntu 中還有一個 netcat 版本,功能很強大,上面例子實際都是使用這個版本的nc:

# nc.traditional -h

[v1.10-38]

connect to somewhere:   nc [-options] hostname port[s] [ports] ...

listen for inbound:     nc -l -p port [-options] [hostname] [port]

options:

        -c shell commands       as `-e'; use /bin/sh to exec [dangerous!!]

        -e filename             program to exec after connect [dangerous!!]

        -b                      allow broadcasts

        -g gateway              source-routing hop point[s], up to 8

        -G num                  source-routing pointer: 4, 8, 12, ...

        -h                      this cruft

        -i secs                 delay interval for lines sent, ports scanned

        -k                      set keepalive option on socket

        -l                      listen mode, for inbound connects

        -n                      numeric-only IP addresses, no DNS

        -o file                 hex dump of traffic

        -p port                 local port number

        -r                      randomize local and remote ports

        -q secs                 quit after EOF on stdin and delay of secs

        -s addr                 local source address

        -T tos                  set Type Of Service

        -t                      answer TELNET negotiation

        -u                      UDP mode

        -v                      verbose [use twice to be more verbose]

        -w secs                 timeout for connects and final net reads

        -z                      zero-I/O mode [used for scanning]

port numbers can be individual or ranges: lo-hi [inclusive];

hyphens in port names must be backslash escaped (e.g. 'ftp\-data').

NetCat

by Jian Lee

簡介

使用

隱藏命令行參數

正/反向域名解析

參數詳解

案例

監聽端口(制作蜜罐)

端口掃描

ftp 服務器

兩台服務器文件校驗

使用注意

簡介

使用

最簡單的使用: ”nc 主機名/IP 端口號/服務名",只要甲主機打開了端口(任何對外服務的端口),乙主機就可以使用nc命令連接這個端口。比如nmap查看到172.16.70.140開了22端口,通常這是sshd的服務端口,我們nc上去看看:

# nc 172.16.70.140 22

SSH-2.0-OpenSSH_4.3

 

ssh的版本號都顯示了,不過一般我們做不了什么事情,但是現在對方的 sshd真在等待我們的輸入,如果你能正確和sshd“交流,那什么都可以做了^_^

使用主機名也可以,這次我們加一個 -v 參數:

# nc -v g.cn 80

Connection to g.cn 80 port [tcp/http] succeeded!

 

端口號我們可以不用數字,用 /etc/services 里面的服務名來代替知名端口號,好像也不是所有的系統自帶nc都支持:

# nc dev3-140  ssh

SSH-2.0-OpenSSH_4.3

 

隱藏命令行參數

如果沒有提供命令行參數,NetCat會提示你從標准輸入來輸入命令參數,然后NetCat會在內部解析輸入。用這種辦法輸入命令式參數,可以用來防止借助“ps”來查看你的命令行參數。下面是一個示例:

# nc

Cmd line: -l 1234

 

此時我們在系統上用ps命令查看nc的進程,是看不到nc的參數的。如果我們直接在命令行寫上參數,ps就能看到命令行參數了。

# nc -l 1234

// 上面命令我們一般能用ps命令查看到類似下面的信息。

# ps aux|grep nc

root      7332  0.0  0.0   1772   536 pts/4    S+   10:38   0:00 nc -l 1234

/反向域名解析

主機參數可以是一個名字或一個IP地址。如果-n出現,則它接受IP地址,而不再對計算機的名字或域名進行解析。如果沒有-n,但加上-v,則 NetCat可進行正/反向域名解析,並警告the all-too-common problem of mismatched name in DNS。這會耗費稍多一點時間,但在某些情況下會有用處。如,你想知道某個IP的主機名,NetCat可省卻你手工查找的時間。

// 甲機器使用參數運行nc

# /data/bin/nc -l 1234

... 此處是等待

 

// 乙機器連接:

# nc -v dev3-168 1234

Connection to dev3-168 1234 port [tcp/search-agent] succeeded!

... 此處是等待

 

// 接着在乙機器輸入任何字符串並按Enter鍵,甲機器都能收到。

上面dev3-168是我的域中一個機器名,-v參數和-n參數都對主機名解析。都是-v參數可以通過ip反向解析出主機名。示例:

// 很多系統自帶nc-v參數不能做到這一點。

# nc -v 172.16.70.140 1234

dev3-140.dev.cn.tlan [172.16.70.140] 1234 (?) open

 

參數詳解

顯示詳細連接信息

-v 參數可以將一些關於連接建立信息輸出到標准錯誤。-v參數多出現幾次,則顯示的信息會更多一些。如果-v參數沒有出現,則NetCat將默默地工作,至到出現錯誤為止。

# nc -vvv g.cn 80

Connection to g.cn 80 port [tcp/http] succeeded!

 

設定建立鏈接時間

-w

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 1   //1秒后斷開連接

Connection to g.cn 80 port [tcp/http] succeeded!

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 2 //2

Connection to g.cn 80 port [tcp/http] succeeded!

[root@dev3-140 opt]# nc -vvv g.cn 80 -w 2 -w 3   // 3秒,覆蓋前面的2秒設置

Connection to g.cn 80 port [tcp/http] succeeded!

 

綁定端口

-p 端口 " 來綁定本地端口。除了因權限限制或端口已經使用外,-p可以綁定任何端口。Root用戶可以綁定保留的1024以內的端口。如果不用-p指定端口,則使用系統給定的未使用的端口。(-p功能在客戶端狀態也可以使用,-s功能並不是在所有的平台上都可用)

作為服務器

-l 參數可以使NetCat以服務器狀態運行。 ”nc -l -p 1234 [remote hostname] [remote port]” 可以用來指定入連的主機和端口,如果申請連接的主機或端口不符指定,則會斷開連接。

// 172.16.70.168上運行nc監聽本地80端口

// 遠程client機器指定ip172.16.70.140,使用的鏈接端口是35

# nc -l -p 80 172.16.70.140 35

 

// 只有172.16.70.140上運行下面命令才能鏈接到168機器上

# nc 172.16.70.168 80 -p 35

執行指定程序

-e 參數后面跟一可執行程序的名稱,當一個連接(入或出)被建立時,這個程序被運行。尤其當NetCat以服務器端運行時,-e參數使其有點象inetd了,只是只能運行一個進行而已。需要說明的是,-e后的程序不能從NetCat的命令行接收參數,如果有參數要傳遞,可能需要一個腳本。通常linux的發行版是不帶這個參數支持的,可以自己編譯,編譯時置-DGAPING_SECURITY_HOLE,則-e參數被NetCat支持。

// 172.16.70.168作為一個服務器,當172.16.70.140的端口35鏈接此140

// 執行 /bin/sh 命令

# nc

Cmd line: -l -p 80 172.16.70.140 35 -e /bin/sh

 

// 172.16.70.140上執行下面命令鏈接上去

# nc 172.16.70.168 80 -p 35

ls   ---> 這是傳遞給172.16.70.168/bin/sh的指令

Adobe

nc_httpd.log

上面 -e 參數用法是在指定主機鏈接進來執行一個程序,相對於服務器的作用,我們也可以在鏈接的時候使用 -e 參數,相對於client端:

// 172.16.70.140 上執行

# nc -l 80

 

// 172.16.70.168 上執行

# nc 172.16.70.140 80 -e /bin/dmesg

其實 -e 參數在哪一個機器都可以執行,這里面有一個基本原理,netcat工具只是在網絡兩端建立一個 TCP/UDP 同路。兩邊的關系都是對等的。

// 172.16.70.24 上執行

# nc -l 1234

 

// 172.16.70.168 上執行

# nc -e /bin/bash 172.16.70.24 1234

 

//這樣在172.16.70.24上輸入的沒一個串字符都是

//172.16.70.168 上的 /bin/bash 的輸入。也就是執行bash命令了。

當做telnetd服務器

-t 參數通常在linux發行版自帶的nc都是支持的,此時NetCat可以登錄到一個telnetd服務器,並提供相關的握手應答,至到出現登錄提示符。

// 172.16.70.140 

# nc -l 80 -t

 

// 172.16.70.168 上可以

# nc 172.16.70.140 80

 

// 也可以

# telnet 172.16.70.140 80

案例

監聽端口(制作蜜罐)

很多時候我們可以讓nc監聽一個端口來達到制作蜜罐的作用。例如我們在 172.16.70.140 機器上啟動nc監聽80端口,然后在172.16.70.168 上用firefox打開地址:http://172.16.70.140 ,這樣140機器的nc端可以得到168試圖連接的信息:

# nc -l 80

GET / HTTP/1.1

Host: 172.16.70.140

User-Agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.5

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

有寫nc版本可以使用 -o 參數保存信息到一個文件中。不過我們可以用 shell重定向來做。只是建立的是文本文件而已。

// 172.16.70.140 上運行

# nc -l 80 &> nc_httpd.log &

 

// 172.16.70.168 上運行

# w3m http://dev3-140

 

// 172.16.70.140 上可以查看 nc_httpd.log

# cat nc_httpd.log

GET / HTTP/1.0

User-Agent: w3m/0.5.2

Accept: text/html, text/*;q=0.5, image/*, application/*, multipart/*, message/*, audio/*

Accept-Encoding: gzip, compress, bzip, bzip2, deflate

Accept-Language: en;q=1.0

Host: dev3-140

不過注意,上面參數后台運行nc的時候,進程用手動kill掉。

端口掃描

// 掃描172.16.70.242030端口

#  nc -z  -v -v 172.16.70.24 20-30

ftp 服務器

前面的nc建立鏈接除了 -e 參數指定運行程序,一般都是從標准輸入獲取輸入。被鏈接的主機將收到的信息輸出到標准輸出。nc可以接受重定向數據,如果使用重定向技術,就可以把nc當做服務器使用了:

// 172.16.70.168 上監聽鏈接(相對於server)

# nc -l -p 80 > passwd

 

// 172.16.70.140 上鏈接(相對於client)

# nc 172.16.70.168 80 < /etc/passwd

// 趕快去168看看,passwd是不是已經傳過去了?

可以打包壓縮傳輸,用條管道而已:

// 172.16.70.168 接收nc的輸入給tar程序

# nc -l -p 80 | tar xzf -

 

// 172.16.70.140 tar打包壓縮e1000e目錄傳遞給nc

# tar cjf - e1000e |  nc 172.16.70.168 80

如果客戶端沒有nc怎么辦?下面一個示例:

// 172.16.70.24 的機器上運行

# nc -l http < /var/log/messages

上面 172.16.70.24 運行了nc,監聽80(http)端口的請求,把 /var/log/messages 作為標准輸入。現在我們可以在 172.16.70.168 上使用firefox打開網址: http://172.16.70.24 就可以看到24機器上的 messages 日志了。

兩台服務器文件校驗

// 172.16.70.216

# find /etc/rc.d/ -type f|xargs md5sum|nc -l 1234

 

// 172.16.70.24

# nc 172.16.70.216 1234|md5sum -c -|grep -v OK

這樣可比較的東西就多了,例如下面命令檢查機器上的sid位:

find / -xdev -type f -user root \( -perm -4000 -o -perm -2000 \)

使用注意

netcat 一般的linux發行版本都自帶,通常都叫 nc 。不過自帶的 netcat 功能不完全,比如 -e的參數不支持,而且一些命令的使用也不一樣。GNUnc功能比較全面,可以自己編譯。

網上介紹 netcat 的使用文章也很多,雖然這個工具原理是如此的簡單,但是在Unix/Linux 環境中它能發揮的作用遠遠超過我們的想像。網上的很多方法並不一定能在你的當前系統中運行,主要是 netcat 的版本不太一樣。也有些經過多次轉貼,已經有錯誤了。這時,你應該仔細查看你的nc 支持選項。使用 "nc -h" 查看,下面兩個版本的 nc 支持選項差別還是很大的:

下面是我的ubuntu系統上 netcat-openbsd 包中的 nc 用法:

# nc -h

OpenBSD netcat (Debian patchlevel 1.89-3ubuntu1)

usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]

          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]

          [-x proxy_address[:port]] [hostname] [port[s]]

        Command Summary:

                -4              Use IPv4

                -6              Use IPv6

                -D              Enable the debug socket option

                -d              Detach from stdin

                -h              This help text

                -i secs         Delay interval for lines sent, ports scanned

                -k              Keep inbound sockets open for multiple connects

                -l              Listen mode, for inbound connects

                -n              Suppress name/port resolutions

                -P proxyuser    Username for proxy authentication

                -p port         Specify local port for remote connects

                -q secs         quit after EOF on stdin and delay of secs (-1 to not quit)

                -r              Randomize remote ports

                -S              Enable the TCP MD5 signature option

                -s addr         Local source address

                -T ToS          Set IP Type of Service

                -C              Send CRLF as line-ending

                -t              Answer TELNET negotiation

                -U              Use UNIX domain socket

                -u              UDP mode

                -v              Verbose

                -w secs         Timeout for connects and final net reads

                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"

                -x addr[:port]  Specify proxy address and port

                -z              Zero-I/O mode [used for scanning]

        Port numbers can be individual or ranges: lo-hi [inclusive]

RHEL 中的 nc 也是openbsd版本的:

# nc -h

usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]

          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]

          [-x proxy_address[:port]] [hostname] [port[s]]

        Command Summary:

                -4              Use IPv4

                -6              Use IPv6

                -D              Enable the debug socket option

                -d              Detach from stdin

                -h              This help text

                -i secs         Delay interval for lines sent, ports scanned

                -k              Keep inbound sockets open for multiple connects

                -l              Listen mode, for inbound connects

                -n              Suppress name/port resolutions

                -p port         Specify local port for remote connects

                -r              Randomize remote ports

                -s addr         Local source address

                -T ToS          Set IP Type of Service

                -C              Send CRLF as line-ending

                -t              Answer TELNET negotiation

                -U              Use UNIX domain socket

                -u              UDP mode

                -v              Verbose

                -w secs         Timeout for connects and final net reads

                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"

                -x addr[:port]  Specify proxy address and port

                -z              Zero-I/O mode [used for scanning]

        Port numbers can be individual or ranges: lo-hi [inclusive]

ubuntu 中還有一個 netcat 版本,功能很強大,上面例子實際都是使用這個版本的nc

# nc.traditional -h

[v1.10-38]

connect to somewhere:   nc [-options] hostname port[s] [ports] ...

listen for inbound:     nc -l -p port [-options] [hostname] [port]

options:

        -c shell commands       as `-e'; use /bin/sh to exec [dangerous!!]

        -e filename             program to exec after connect [dangerous!!]

        -b                      allow broadcasts

        -g gateway              source-routing hop point[s], up to 8

        -G num                  source-routing pointer: 4, 8, 12, ...

        -h                      this cruft

        -i secs                 delay interval for lines sent, ports scanned

        -k                      set keepalive option on socket

        -l                      listen mode, for inbound connects

        -n                      numeric-only IP addresses, no DNS

        -o file                 hex dump of traffic

        -p port                 local port number

        -r                      randomize local and remote ports

        -q secs                 quit after EOF on stdin and delay of secs

        -s addr                 local source address

        -T tos                  set Type Of Service

        -t                      answer TELNET negotiation

        -u                      UDP mode

        -v                      verbose [use twice to be more verbose]

        -w secs                 timeout for connects and final net reads

        -z                      zero-I/O mode [used for scanning]

port numbers can be individual or ranges: lo-hi [inclusive];

hyphens in port names must be backslash escaped (e.g. 'ftp\-data').


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM