計算機網絡怎麼學?學會這幾個工具有助有你理解網絡協議!

在實際開發過程中,熟悉使用Linux或者Windows中相關網絡工具,可以讓我更快更準的找到故障,所以今天分享幾個必回的網絡利器

1 nc

nc–>“瑞士軍刀”。不知大家在滲透過程中,拿了shell有沒有使用nc搞點事兒。它用來快速構建網絡鏈接。常用來調試客戶端程序。

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?

ping

再具體實現中其實使用了ICMP協議,它是一種基於IP協議的控制協議,網際控制協議,其報文什麼樣子呢

下面分別闡述下字段含義

  • 類型: 表示ICMP的類型,如果爲0表示請求類型,爲8表示應答
  • 代碼:用來查找產生錯誤的原因
  • 校驗和:檢查錯誤的數據
  • 標識符:使用標識符確認到底是誰發送的控制協議
  • 序列號:唯一確定的一個報文

ping命令組裝成上述的IP報文進行發送,報文目的地之爲ping目的地址,原地址爲發送ping主機地址,然後按照ICMP的規則填寫數據。

隨後IP報文通過ARP協議,知道

查看詳細參數

ping參數

常用參數
[-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等信息

ipaddr

上圖中被馬賽克的位置假設爲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

知道了相關參數,下面看幾個案例

執行任務 執行命令
捕獲特定網口數據包 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

老規矩,上幾個例子

執行任務 命令
列出所有的網絡鏈接 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 是一個強大的網絡數據包操作工具才能實現得了的。只是大概介紹,具體用法官網非常詳細,有助於學習網絡協議

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

給俺點個讚唄,可以讓更多的人看到這篇文章,順便激勵下我,嘻嘻。

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