在實際開發過程中,熟悉使用Linux或者Windows中相關網絡工具,可以讓我更快更準的找到故障,所以今天分享幾個必回的網絡利器
1 nc
nc–>“瑞士軍刀”。不知大家在滲透過程中,拿了shell有沒有使用nc搞點事兒。它用來快速構建網絡鏈接。常用來調試客戶端程序。
小賤上案例
執行任務 | 執行命令 |
---|---|
掃描機器A端口號在30-40的服務 | nc -z A 30-40 |
連接服務器A 端口號爲5000 | nc -C A 5000 |
傳送文件 | MachineA:nc -v -n ip port <D:\a.exe MachineB:nc -v -l -p port >E:\a.exe |
2 ping
用來實現對網路連通性探測。我們知道網絡上機器有唯一確定的IP地址,給地方發送數據包,根據返回的信息初步判斷目標機器是否存在或者目標機器操作系統是啥。另外經常使用的Ping,底層原理是什麼,是就TCP/UDP?
再具體實現中其實使用了ICMP協議,它是一種基於IP協議的控制協議,網際控制協議,其報文什麼樣子呢
下面分別闡述下字段含義
- 類型: 表示ICMP的類型,如果爲0表示請求類型,爲8表示應答
- 代碼:用來查找產生錯誤的原因
- 校驗和:檢查錯誤的數據
- 標識符:使用標識符確認到底是誰發送的控制協議
- 序列號:唯一確定的一個報文
ping命令組裝成上述的IP報文進行發送,報文目的地之爲ping目的地址,原地址爲發送ping主機地址,然後按照ICMP的規則填寫數據。
隨後IP報文通過ARP協議,知道
查看詳細參數
常用參數
[-l] :定義所發送數據包的大小,默認爲32字節
[-n] :定義所發數據包的次數,默認爲3次
[-t] :表示不間斷向目標IP發送數據包
TTL
TTL 是 IP 協議包中的一個值,它告訴網絡路由器包在網絡中的時間是否太長而應被丟棄
-
TTL設置時間越長,那麼緩存時間也就越長,更新也就越不容易生效。增大TTL可以節約域名解析時間從而加快網站的訪問
-
減小TTL值,減少更換空間時的不可訪問時間
返回值
- Request timed out
可能出現的情況
對方已經關機或者根本沒有這個地址
可能不在同一個網段,即使通過路由也無法找到對方從而出現超時
對方存在但是設置了防火牆過濾
- Destination host Unreachable
與對方不在同一個網段且沒有設置默認路由
網線出毛病
- Bad IP address
要麼是IP地址不存在,要麼是沒有正確連接DNS服務器從而無法解析
3 ifconfig/ipaddr
查看服務器網卡,IP等信息
上圖中被馬賽克的位置假設爲10.172.100.3,這樣就是一個IP地址,凡是都有規則,IP地址按照小數點分割爲四部分,每部分佔8字節,所以IP地址爲32位,那麼這樣的IP地址一共有多少呢
從而出現IPV6,128位
當時覺得32位很夠用了,還將其分爲5類,如下圖所示
我們再看看各類地址的主機數量是多少
上圖中可知道c類地址太少了吧,但是B類地址又太多,怎麼中和一下嘞
無類型域間選路
CIDR 地址中包含標準的32位IP地址和有關網絡前綴位數的信息。比如10.172.100.3/24,IP地址斜槓後面數字24,代表24位是網絡號,後面八位爲主機號。
如何得到網絡號?
使用IP地址和子網掩碼進行AND計算得到網絡號。
4 tcpdump
和它類似的工具在windows中是wireshark,其採用底層庫winpcap/libpcap實現。採用了bpf過濾機制。下面我們看看提供的不同參數的含義。
知道了相關參數,下面看幾個案例
執行任務 | 執行命令 |
---|---|
捕獲特定網口數據包 | tcpdump -i eth0 |
捕獲特定個數(1000)的包 | tcpdump -c 1000 -i eth0 |
將捕獲的包保存到文件 | tcpdump -w a.pcap -i eth0 |
讀取pcap格式的包 | tcpdump -r a.pcap |
增加捕獲包的時間戳 | tcpdump -n -ttt -i eth0 |
指定捕獲包的協議類型 | tcpdump -i eth0 arp |
捕獲指定端口 | tcpdump -i eth0 post 22 |
捕獲特定目標ip+port的包 | tcpdump -i eth0 dst address and port 22 |
捕獲DNS請求和響應 | tcpdump -i eth0 -s0 port 53 |
匹配Http請求頭 | tcpdump -s 0 -v -n -l | egrep -i “POST /|GET /|Host:” |
5 lsof
列出當前系統打開的文件描述符工具。可以得知感興趣的描述符是被哪些進程使用
同樣,我們看看相關參數
老規矩,上幾個例子
執行任務 | 命令 |
---|---|
列出所有的網絡鏈接 | lsof -i |
列出所有udp的網絡鏈接 | lsof -i udp |
列出誰在使用某個端口 | lsof -i :3306 |
列出誰在使用特定的tcp端口 | lsof -i tcp:80 |
根據文件描述範圍列出文件信息 | lsof -d 2-3 |
7 netstat
netstat是一個網絡信息統計工具。它可以得到網卡接口上全部瞭解,路由表信息,網卡接口信息等。通常在網絡編程中我們用它來顯示TCP連接以及狀態信息。
下面列舉幾個常用例子
執行任務 | 執行命令 |
---|---|
列出所有連接 | netstat -a |
只列出TCP或者UDP | netstat -at/netstat -au |
列出監聽中的連接 | netstat -tnl |
獲取進程名、進程號以及用戶 ID | nestat -nlpt |
打印統計信息 | netstat -s |
netstat持續輸出 | netstat -ct |
打印active狀態的連接 | netstat -atnp | grep ESTA |
查看服務是否運行(npt) | netstat -aple| grep ntp |
7 wireshark
8 dpkt
dpkt定義包packet類,它定義了網絡報文類型的基礎類。其中IP,ICMP等繼承於dpkt class,每一個子類有一個__ hdr__ 結構,此結構定義了不同報文的頭部,方便取出相應的控制字段。示例如下
#!/usr/bin/python
#coding=utf-8
import dpkt
import socket
import optparse
def printPcap(pcap):
# 遍歷[timestamp, packet]記錄的數組
for (ts, buf) in pcap:
try:
# 獲取以太網部分數據
eth = dpkt.ethernet.Ethernet(buf)
# 獲取IP層數據
ip = eth.data
# 把存儲在inet_ntoa中的IP地址轉換成一個字符串
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
print '[+] 源地址: ' + src + ' --> 目標地址: ' + dst
except:
pass
def main():
parser = optparse.OptionParser('[*] Usage : ./pcapTest.py -f <file>')#測試包
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()
9 scapy
注意哈,這個是嗅探包不是爬蟲框架scrapy哈。看看官網怎麼說的,如“強大的交互式包操作工具”、“支持大量協議的包解析和包構造”、“輕鬆取代 hping,85% 的 nmap,arpspoof,tcpdump 等等”。不過歸根到底,它說的強大功能,都是基於 Scapy 是一個強大的網絡數據包操作工具才能實現得了的。只是大概介紹,具體用法官網非常詳細,有助於學習網絡協議
有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章
給俺點個讚唄,可以讓更多的人看到這篇文章,順便激勵下我,嘻嘻。