學(xué)習(xí)網(wǎng)絡(luò)請落實這幾款小工具
在實際開發(fā)過程中,熟練使用Linux或者Windows中相關(guān)網(wǎng)絡(luò)工具,可以更快更準(zhǔn)地找到故障。所以,今天就跟大家分享幾個實用的網(wǎng)絡(luò)利器。
1 nc
nc-->“瑞士軍刀”。不知大家在滲透過程中,拿了shell有沒有使用nc搞點事兒。它用來快速構(gòu)建網(wǎng)絡(luò)鏈接,常用來調(diào)試客戶端程序。

舉例
| 執(zhí)行任務(wù) | 命令 |
|---|---|
| 掃描機(jī)器A端口號在30-40的服務(wù) | nc -z A 30-40 |
| 連接服務(wù)器A端口號為5000 | nc -C A 5000 |
| 傳送文件 | MachineA:nc -v -n ip port |
2 ping
用來實現(xiàn)對網(wǎng)絡(luò)連通性探測。我們知道網(wǎng)絡(luò)上機(jī)器有唯一確定的IP地址,給對方發(fā)送數(shù)據(jù)包,根據(jù)返回的信息初步判斷目標(biāo)機(jī)器是否存在或者目標(biāo)機(jī)器操作系統(tǒng)是啥。那么,經(jīng)常使用的ping,底層原理是什么,是TCP/UDP?

在具體實現(xiàn)中,其實使用了ICMP協(xié)議(網(wǎng)際控制報文協(xié)議),它是一種基于IP協(xié)議的控制協(xié)議。那么,ICMP協(xié)議(網(wǎng)際控制報文協(xié)議),其報文什么樣子呢?

下面分別闡述下字段含義:
類型:表示ICMP的類型,如果為0表示請求類型,為8表示應(yīng)答。
代碼:用來查找產(chǎn)生錯誤的原因。
校驗和:檢查錯誤的數(shù)據(jù)。
標(biāo)識符:使用標(biāo)識符確認(rèn)到底是誰發(fā)送的控制協(xié)議。
序列號:唯一確定的一個報文。
ping命令組裝成上述的IP報文進(jìn)行發(fā)送,報文目的地為ping目的地址,原地址為發(fā)送ping主機(jī)地址,然后按照ICMP的規(guī)則填寫數(shù)據(jù)。
隨后IP報文通過ARP協(xié)議,請求廣播到局域網(wǎng)絡(luò)上的所有主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址。
查看詳細(xì)參數(shù)

常用參數(shù)
[-l] :定義所發(fā)送數(shù)據(jù)包的大小,默認(rèn)為32字節(jié)。
[-n] :定義所發(fā)數(shù)據(jù)包的次數(shù),默認(rèn)為3次。
[-t] :表示不間斷向目標(biāo)IP發(fā)送數(shù)據(jù)包。
TTL
TTL 是 IP 協(xié)議包中的一個值,它告訴網(wǎng)絡(luò)路由器,包在網(wǎng)絡(luò)中的時間是否太長而應(yīng)被丟棄。
TTL設(shè)置時間越長,那么緩存時間也就越長,更新也就越不容易生效。增大TTL可以節(jié)約域名解析時間從而加快網(wǎng)站的訪問
減小TTL值,減少更換空間時的不可訪問時間
返回值
Request timed out
可能出現(xiàn)的情況:
-對方已經(jīng)關(guān)機(jī)或者根本沒有這個地址。
-可能不在同一個網(wǎng)段,即使通過路由也無法找到對方從而出現(xiàn)超時。
-對方存在但是設(shè)置了防火墻過濾。
Destination host Unreachable
可能出現(xiàn)的情況:
-與對方不在同一個網(wǎng)段且沒有設(shè)置默認(rèn)路由
-網(wǎng)線出毛病
Bad IP address
可能出現(xiàn)的情況:
-IP地址不存在
-沒有正確連接DNS服務(wù)器從而無法解析
3 ifconfig/ip addr
查看服務(wù)器網(wǎng)卡、IP等信息。

上圖中被馬賽克的位置假設(shè)為10.172.100.3,這樣就是一個IP地址,IP地址按照小數(shù)點分割為四部分,每部分占8字節(jié),所以IP地址為32位。
那么,這樣的IP地址一共有多少呢?一共有2的32次方個,估算約為42.9億個,除去一些特用的IP和一些不能用的IP,剩下可用的不到40億。為解決網(wǎng)絡(luò)地址資源不足的問題,從而出現(xiàn)IPV6,128位的IP地址。
剛開始覺得32位很夠用了,還將其分為5類,如下圖所示:

我們再看看各類地址的主機(jī)數(shù)量是多少?

上圖中可知道C類地址太少了吧,但是B類地址又太多,怎么中和一下嘞?
無類型域間選路
CIDR地址中包含標(biāo)準(zhǔn)的32位IP地址和有關(guān)網(wǎng)絡(luò)前綴位數(shù)的信息。比如10.172.100.3/24,IP地址斜杠后面數(shù)字24,代表前24位是網(wǎng)絡(luò)號,后面8位為主機(jī)號。
如何得到網(wǎng)絡(luò)號?
使用IP地址和子網(wǎng)掩碼進(jìn)行AND計算得到網(wǎng)絡(luò)號。

4 tcpdump
和它類似的工具在windows中是wireshark,其采用底層庫winpcap/libpcap實現(xiàn),采用了bpf過濾機(jī)制。下面我們看看提供的不同參數(shù)的含義。

知道了相關(guān)參數(shù),下面看幾個案例。
| 執(zhí)行任務(wù) | 命令 |
|---|---|
| 捕獲特定網(wǎng)口數(shù)據(jù)包 | tcpdump -i eth0 |
| 捕獲特定個數(shù)(1000)的包 | tcpdump -c 1000 -i eth0 |
| 將捕獲的包保存到文件 | tcpdump -w a.pcap -i eth0 |
| 讀取pcap格式的包 | tcpdump -r a.pcap |
| 增加捕獲包的時間戳 | tcpdump -n -ttt -i eth0 |
| 指定捕獲包的協(xié)議類型 | tcpdump -i eth0 arp |
| 捕獲指定端口 | tcpdump -i eth0 post 22 |
| 捕獲特定目標(biāo)ip+port的包 | tcpdump -i eth0 dst address and port 22 |
| 捕獲DNS請求和響應(yīng) | tcpdump -i eth0 -s0 port 53 |
| 匹配Http請求頭 | tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:" |
5 lsof
列出當(dāng)前系統(tǒng)打開的文件描述符工具,可以得知感興趣的描述符是被哪些進(jìn)程使用。
同樣,我們看看相關(guān)參數(shù):

舉例
| 執(zhí)行任務(wù) | 命令 |
|---|---|
| 列出所有的網(wǎng)絡(luò)鏈接 | lsof -i |
| 列出所有udp的網(wǎng)絡(luò)鏈接 | lsof -i udp |
| 列出誰在使用某個端口 | lsof -i :3306 |
| 列出誰在使用特定的tcp端口 | lsof -i tcp:80 |
| 根據(jù)文件描述范圍列出文件信息 | lsof -d 2-3 |
6 netstat
netstat是一個網(wǎng)絡(luò)信息統(tǒng)計工具。它可以得到網(wǎng)卡接口上全部鏈接、路由表信息、網(wǎng)卡接口信息等。通常在網(wǎng)絡(luò)編程中我們用它來顯示TCP連接以及狀態(tài)信息。

下面列舉幾個常用例子。
| 執(zhí)行任務(wù) | 命令 |
|---|---|
| 列出所有連接 | netstat -a |
| 只列出TCP或者UDP | netstat -at/netstat -au |
| 列出監(jiān)聽中的連接 | netstat -tnl |
| 獲取進(jìn)程名、進(jìn)程號以及用戶ID | nestat ?-nlpt |
| 打印統(tǒng)計信息 | netstat -s |
| netstat持續(xù)輸出 | netstat -ct |
| 打印active狀態(tài)的連接 | netstat -atnp | grep ESTA |
| 查看服務(wù)是否運行(npt) | netstat -aple| grep ntp |
7 dpkt
dpkt定義包packet類,它定義了網(wǎng)絡(luò)報文類型的基礎(chǔ)類。其中IP、ICMP等繼承于dpkt class,每一個子類有一個_hdr_結(jié)構(gòu),此結(jié)構(gòu)定義了不同報文的頭部,方便取出相應(yīng)的控制字段。示例如下:
#!/usr/bin/python
#coding=utf-8
import?dpkt
import?socket
import?optparse
def?printPcap(pcap):
????#?遍歷[timestamp,?packet]記錄的數(shù)組
????for?(ts,?buf)?in?pcap:
????????try:
????????????#?獲取以太網(wǎng)部分?jǐn)?shù)據(jù)
????????????eth?=?dpkt.ethernet.Ethernet(buf)
????????????#?獲取IP層數(shù)據(jù)
????????????ip?=?eth.data
????????????#?把存儲在inet_ntoa中的IP地址轉(zhuǎn)換成一個字符串
????????????src?=?socket.inet_ntoa(ip.src)
????????????dst?=?socket.inet_ntoa(ip.dst)
????????????print?'[+]?源地址:?'?+?src?+?'?-->?目標(biāo)地址:?'?+?dst
????????except:
????????????pass
def?main():
????parser?=?optparse.OptionParser('[*]?Usage?:?./pcapTest.py?-f?' )#測試包
????parser.add_option('-f',dest='fileName',type='string',help='specify?target?filename')
????(options,args)?=?parser.parse_args()
????fileName?=?options.fileName#?取得包名
????if?fileName?==?None:
????????print?parser.usage
????????exit(0)
????else:
????????#f?=?open('geotest.pcap')
????????f?=?open(fileName)
????????pcap?=?dpkt.pcap.Reader(f)
????????printPcap(pcap)
if?__name__?==?'__main__':
????main()
8 scapy
注意哈,這個是嗅探包,不是爬蟲框架scrapy哈。看看官網(wǎng)怎么說的,如“強(qiáng)大的交互式包操作工具”、“支持大量協(xié)議的包解析和包構(gòu)造”、“輕松取代hping,85%的nmap,arpspoof,tcpdump等等”。不過歸根到底,它說的強(qiáng)大功能,都是基于Scapy是一個強(qiáng)大的網(wǎng)絡(luò)數(shù)據(jù)包操作工具才能實現(xiàn)得了的。這里只是大概介紹,具體用法官網(wǎng)非常詳細(xì),有助于學(xué)習(xí)網(wǎng)絡(luò)協(xié)議。

文章整體目錄

如何獲取
很簡單,在我的微信公眾號?帥地玩編程?回復(fù)?程序員內(nèi)功修煉?即可獲取《程序員內(nèi)功修煉》第一版和第二版的 PDF。
推薦,推薦一個 GitHub,這個 GitHub 整理了幾百本常用技術(shù)PDF,絕大部分核心的技術(shù)書籍都可以在這里找到,GitHub地址:https://github.com/iamshuaidi/CS-Book(電腦打開體驗更好),地址閱讀原文直達(dá)
