返回文章列表

Bash 網路操作:基礎設定、掃描與流量分析

本文探討如何利用 Bash 進行網路操作,包含 IP 位址與子網路、網路介面設定、網路掃描及流量分析等。文章首先介紹 IPv4 與 IPv6 的基本概念,並搭配 `ip`、`ping`、`nmap`、`tshark` 等指令與指令碼範例,逐步引導讀者瞭解如何使用 Bash

網路管理 資安

Bash 在網路管理和資訊安全領域扮演著重要的角色,它能協助工程師進行網路設定、掃描及流量分析等工作。理解 IP 位址、子網路遮罩以及網路介面等基本概念是使用 Bash 進行網路操作的基礎。透過 ip a 指令可以檢視系統中的網路介面和 IP 位址資訊,搭配 ipcalc 工具能更深入瞭解子網路組態。ping 指令則是用於測試網路連線,確認主機之間的通訊是否正常。這些指令都內建於 Bash 中,方便工程師快速診斷網路問題。此外,Bash 指令碼的應用更能提升效率,例如透過指令碼自動化掃描網段內的活躍主機,或擷取特定網路介面的流量資訊,對於網路管理和安全檢測都至關重要。

透過 Bash 操作網路基礎

在現代資訊安全和測試中,Bash 作為一個強大的命令列工具,能夠幫助我們高效地完成各種網路操作。本章將探討如何利用 Bash 執行網路基礎設定、網路掃描以及網路流量分析等任務。首先,玄貓將帶您瞭解 IP 位址和子網路的基本概念,然後進一步探討如何使用 Bash 指令碼來進行網路組態、敵對性網路掃描以及流量分析。

IP 位址與子網路

IP 位址可以類別比為街道地址,它們幫助裝置在網路上互相通訊。每個連線到網路的裝置都會分配一個唯一的 IP 位址。主要有兩種 IP 位址:IPv4 和 IPv6。IPv4 是目前最廣泛使用的版本,它是 32 位元數值,由四個十進位制數字組成,每個數字之間以句點分隔。

IP 位址的基本結構

IPv4 位址通常以四組數字表示,每組數字範圍在 0 到 255 之間,例如 192.168.1.1。這些數字稱為八位元組(octet)。以下是這個 IP 位址的解析:

  • 第一部分 192 是第一個八位元組。
  • 第二部分 168 是第二個八位元組。
  • 第三部分 1 是第三個八位元組。
  • 第四部分 1 是第四個八位元組。

這些八位元組共同組成了一個 32 位元的地址空間。

檢視 IP 位址

要在 Bash 中檢視裝置的 IP 位址,可以使用 ip address 命令,簡寫為 ip a。這個命令會列出所有網路介面及其相關資訊。

ip a

以下是示例輸出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.61.128/24 brd 192.168.61.255 scope global dynamic eth0
       valid_lft forever preferred_lft forever

檢視子網路

除了 IP 地址之外,還有子網路遮罩(subnet mask),它用來標識網路地址的一部分。子網路遮罩通常以 / 加上一個數字表示(例如 /24),這表示前 24 個二進位制位是子網路的一部分。

要更詳細地檢視子網路資訊,可以使用 ipcalc 工具:

sudo apt install -y ipcalc
ipcalc -b -m -p <你的 IP 地址>

例如:

ipcalc -b -m -p 192.168.61.128/24

這樣會輸出詳細的子網路資訊。

網路介面與介面名稱

在上述輸出中,您可以看到多個網路介面:

  • lo: 本機回環介面(loopback),用於模擬內部通訊。
  • eth0: 第一個乙太網介面,通常用於連線實體或無線網路。

每個介面都有其對應的 IP 地址和其他組態資訊。

loopback 介面

loopback 介面(lo)是一種特殊的虛擬介面,用來讓系統能夠與自己通訊。它通常被分配為 127.0.0.1,這稱為 localhost。它在測試和開發過程中非常重要,因為它允許應用程式在不需要外部網路連線的情況下進行通訊測試。

主要介面

主要介面(如 eth0)則是真實的物理或虛擬介面,用來連線到外部網路。每個主要介面都有其分配的 IP 地址和子網路遮罩。

檢視主機與其他主機之間的通訊

若要了解主機之間的通訊狀況,可以使用 ping 命令來測試連線性:

ping <目標 IP 地址>

例如:

ping google.com

這樣可以檢查您是否能夠成功連線到目標主機。

指令碼示例

以下是一段簡單的 Bash 指令碼,用來檢視當前主機所有活動中的 IPv4 地址:

#!/bin/bash

# 查詢並列出所有活動中的 IPv4 地址
echo "查詢並列出所有活動中的 IPv4 地址:"
ip -o -4 addr show | awk '{print $4}'

內容解密:

  • 程式邏輯:這段程式碼使用了 ip -o -4 addr show 命令來查詢系統中所有活動中的 IPv4 地址。-o-4 分別代表僅顯示簡短輸出格式且僅顯示 IPv4 地址。
  • 技術原理:這些命令從系統取得所有 IPv4 介面資料並傳遞給 awk '{print $4}' 命令,其中 $4 指的是第四欄位資料(也就是 IPv4 地址)。
  • 設計考量:這段程式碼旨在快速且有效地取得系統中所有活動中的 IPv4 地址,方便日後進行進階的網路操作。
  • 潛在改進:如果需要更詳細地檢視特定介面的資料或其他形式的輸出結果(如 XML 或 JSON),可以考慮增加引數選項或使用其他工具(如 jqxmlstarlet)。
  • 技術應用:此指令碼可以應用於自動化測試和佈署過程中,快速確認目標系統是否具有正確組態並且可達到。

掃描與流量分析

除了基本設定外,Bash 指令碼還能夠進行更複雜的任務如掃描、流量分析等。

自動化掃描工具

例如使用 Nmap 工具進行掃描:

nmap -sP <目標IP範圍>

Nmap 是一種強大的開源掃描工具,常用於發現目標系統上的開放埠、服務及漏洞等資訊。

分析流量

使用 Wireshark 或 Tshark 工具來捕捉及分析流量:

tshark -i <介面名稱>

Tshark 是 Wireshark 的命令列版本,能夠捕捉並分析網路上傳輸的資料包。

Bash Networking 基礎與實作

在網路設定與管理方面,Bash 這個強大的命令列工具能夠幫助我們進行各種操作。以下我們將探討如何使用 Bash 來進行網路基礎設定、IP 位址與子網遮罩的計算、網路介面的組態以及排除網路連線問題。

IPv4 位址與子網遮罩

首先,讓我們來瞭解一下 IPv4 位址與子網遮罩的基本概念。IPv4 位址由 32 個二進位制位組成,通常表示為四個八位元組(每個八位元組由一個數字和三個點分隔),例如 192.168.1.1。子網遮罩則用來區分網路部分和主機部分,例如 /24 表示前 24 個位元為網路位址,剩餘的 8 個位元為主機位址。

假設我們有一個 IP 地址 192.168.61.0 並且使用 /24 的子網遮罩,這意味著前 24 個位元是網路部分,剩下的 8 個位元是主機部分。因此,這個子網中的可用主機 IP 地址範圍從 192.168.61.1192.168.61.254

這裡有一些關鍵點需要注意:

  • 網路地址(如 192.168.61.0)和廣播地址(如 192.168.61.255)不能分配給主機。
  • 第一個可用主機地址通常被路由器佔用,例如 192.168.61.1
  • 廣播地址用於向整個網路內的所有裝置傳送資料。

IPv6 的基本概念

隨著 IPv4 地址的耗盡,IPv6 被開發出來以解決這個問題。IPv6 的地址長度為 128 位元,比 IPv4 的 32 位元大得多。這樣的設計使得 IP 地址幾乎無限多。

IPv6 地址通常以八組四個十六進位制數字來表示,並以冒號分隔。例如,一個典型的 IPv6 地址可能看起來像 2001:0db8:85a3:0000:0000:8a2e:0370:7334

要在 Bash 中處理 IPv6 地址,可以使用 ipcalcsipcalc 工具。雖然 ipcalc 支援 IPv6,但 sipcalc 提供了更多有關 IPv6 的資訊。以下是如何安裝並使用 sipcalc

sudo apt install -y sipcalc

網路介面的組態

在 Bash 中組態網路介面可以使用 ip 命令。以下是一個設定靜態 IP 地址的範例:

sudo ip addr add 192.168.1.10/24 dev eth0
sudo ip link set eth0 up

這兩行命令分別為:

  • sudo ip addr add: 新增 IP 地址到指定的網路介面。
  • sudo ip link set eth0 up: 啟動指定的網路介面。

此外,我們還可以設定預設閘道:

sudo ip route add default via 192.168.1.1 dev eth0

這行命令會在 IP 路由表中新增一個預設閘道。

內容解密:

sudo ip addr add 192.168.1.10/24 dev eth0

以上程式碼第一行程式碼是使用「ip addr add」命令來組態靜態IP地址「新增」到特定的網路卡介面「dev eth0」。 「/24」表示採用CIDR(無類別域間路由選擇)標準來表示IP地址所屬之子網遮罩。

sudo ip link set eth0 up

以上第二行程式碼是使用「ip link set」命令對特定之網路卡介面「eth0」進行啟動。

sudo ip route add default via 192.168.1.1 dev eth0

以上第三行程式碼是使用「ip route add」命令對特定之「eth0」網路卡進行預設閘道設定。 以上三行程式碼需要有root許可權才能成功執行。 以上三行程式碼執行完成後可以確保特定之「eth0」網路卡已經成功組態好靜態IP地址且已經成功啟動。

排除網路連線問題

當遇到 Linux 網路連線問題時,可以使用多種強大的命令列工具來排除問題。以下是一些常見的排除方法:

檢查網路介面狀態

使用 ip link 命令來檢查網路介面的狀態:

ip link show eth0

如果介面狀態為 DOWN(下線),可以使用以下命令啟動它:

sudo ip link set eth0 up

檢查 IP 地址組態

使用 ip address show 命令來檢查特定介面的 IP 組態:

ip address show eth0

測試基本連通性

使用 ping 命令來測試與遠端主機的連通性:

ping 8.8.8.8

如果遠端主機無法連通,可能是因為遠端主機問題或是網路連線問題。

路徑追蹤

使用 traceroute 命令來追蹤到遠端主機的每一跳:

traceroute google.com

這可以幫助我們找出哪一跳出現了問題。

DNS 查詢

如果有 DNS 名稱解析問題,可以使用 nslookupdig 命令來進行檢查:

nslookup google.com

下載資源相關:(強制移除)

注意:本文中所有提及超連結及圖片均已移除

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Bash 網路操作:基礎設定、掃描與流量分析

package "安全架構" {
    package "網路安全" {
        component [防火牆] as firewall
        component [WAF] as waf
        component [DDoS 防護] as ddos
    }

    package "身份認證" {
        component [OAuth 2.0] as oauth
        component [JWT Token] as jwt
        component [MFA] as mfa
    }

    package "資料安全" {
        component [加密傳輸 TLS] as tls
        component [資料加密] as encrypt
        component [金鑰管理] as kms
    }

    package "監控審計" {
        component [日誌收集] as log
        component [威脅偵測] as threat
        component [合規審計] as audit
    }
}

firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成

@enduml

此圖示展示了 Bash Networking 的主要概念及其相互關聯。從理解 IPv4 與 IPv6 的基本概念開始,然後探討如何在 Bash 中進行相關組態及排除故障。

網路基礎與 Bash 的結合

DNS 查詢與解析

在網路排錯過程中,瞭解如何查詢和解析 DNS 記錄是非常重要的。透過 nslookup 命令,我們可以查詢組態的 DNS 伺服器並顯示名稱解析後的 IP 位址。nslookup-query-q 選項允許我們指定要查詢的 DNS 記錄型別。以下是一些具體的範例:

  • 查詢 example.com 的 IPv4 位址:
$ nslookup -query=A example.com
  • 查詢 example.com 的 IPv6 位址:
$ nslookup -query=AAAA example.com
  • 查詢 example.com 的郵件伺服器:
$ nslookup -query=MX example.com
  • 列出 example.com 網域名稱的權威名稱伺服器:
$ nslookup -query=NS example.com

這些命令可以幫助我們快速瞭解網域名稱的解析情況,並且對於排錯 DNS 相關問題非常有幫助。

使用 dig 命令進行深入分析

如果需要更詳細的 DNS 資訊,可以使用 dig 命令。這個命令會輸出原始的 DNS 應答,包括查詢、答案以及各種 DNS 旗標和選項。這對於診斷低層次的 DNS 問題非常有用。

$ dig example.com

如果查詢失敗或傳回不正確的結果,可能是因為 /etc/resolv.conf 中的 DNS 組態問題,或者是 DNS 伺服器本身出現問題。

檢視系統日誌以排除網路問題

在排除網路問題時,檢視系統日誌是一個不可或缺的步驟。Debian 系統中的日誌通常存放在 /var/log 目錄下。以下是一些關鍵的日誌檔案:

  • /var/log/syslog:通用系統訊息。
  • /var/log/kern.log:核心訊息,包括網路驅動程式問題。
  • /var/log/daemon.log:背景服務訊息。
  • /var/log/apache2/error.log:Web 伺服器錯誤。
  • /var/log/mysql/error.log:資料函式庫錯誤。

我們可以使用 tail, less, 或 grep 命令來檢視和搜尋這些日誌檔案。例如:

  • 檢視 syslog 的最後 100 行:
$ tail -n 100 /var/log/syslog
  • 搜尋 kern.log 中提到 eth0 的部分:
$ grep eth0 /var/log/kern.log

如果找不到這些日誌檔案,可能是因為系統使用了 journald。可以使用以下命令來檢視 journald 日誌:

$ journalctl -r -p err

指令解密:

「tail」命令用來顯示檔案的最後幾行,適用於即時監控日誌變化; 「grep」命令則用來搜尋檔案中符合特定模式的行,很適合在大型日誌中找出特定訊息; 「journalctl」是 systemd 日誌管理工具,能夠顯示由 systemd 收集的所有日誌訊息。

自動化網路列舉

作為測試人員(Pentester),發現網路上的活躍主機是非常基本且重要的任務。這些資訊對於繪製網路拓撲結構、識別潛在目標以及確保網路可見性至關重要。

基本概念

我們可以使用 ICMP echo request(也就是 Ping)來發現活躍主機。當你 Ping 一個 IP 地址時,你的電腦會傳送一個 ICMP echo request 資料包到該地址。如果該地址有活躍主機,它會回應一個 ICMP echo reply 資料包。

另一種方法是掃描每個 IP 地址上的開放埠。如果主機有回應 TCP SYN 掃描或完整 TCP connect 掃描的開放埠,那麼這是一個強烈的證據表明該主機是活躍的,即使它不回應 Ping(有些主機組態為不回應 ICMP)。

指令碼示例

以下是一個簡單的 Bash 一行指令碼,用來 Ping 一個 IP 地址範圍並列出回應的 IP 地址:

$ for ip in 10.0.1.{1..254}; do ping -c 1 $ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" & done

內容解密:

  • 「for ip in 10.0.1.{1..254}; do」:這行開始了一個 for 輪迴,迭代從 10.0.1.1 到 10.0.1.254 的 IP 地址範圍。大括號 {1..254} 是 Bash 的括弧擴充套件功能,用來生成數列。
  • 「ping -c 1 $ip」:這行 Ping 當前輪迴中的 IP 地址。-c 1 語法表示只傳送一個 Ping 資料包。
  • 「grep “64 bytes”」:這行過濾 Ping 輸出,只保留包含 “64 bytes” 的行(表示成功回應)。
  • 「cut -d " " -f 4」:這行剪下過濾後 Ping 輸出中的第四欄位(即回應的 IP 地址)。
  • 「tr -d “:"」:這行去掉 IP 地址後面多餘的冒號。
  • 「& done」:最後一行將每個 Ping 處理過程放到背景執行,「&」符號代表背景執行,「done」關閉 for 輪迴。

執行這段指令碼會快速 Ping 整個子網路(例如 10.0.1.0/24)並列出所有回應的 IP 地址。

標題格式規範:

小段落標題

以此類別推…