Ubuntu

在一個介面上發送數據包並在另一個介面上接收它以進行測試

  • January 8, 2021

我想測試我在 Ubuntu 16.04.6 LTS 上編寫的 DHCP 客戶端。我想在我的筆記型電腦上本地進行,即在內部發送和接收 DHCP 數據包。

這是我嘗試過的:

  • 創建了兩個虛擬介面:dummy0,dummy1
  • 為這兩個介面創建了橋:br0

目標是發送 DHCP 發現dummy0並接收它dummy1,我正在發送 DHCP 發現,不幸的是我在介面dummy0上看不到任何數據包。dummy1如果可以接收到,下一步就是執行 DHCP 伺服器dummy1來測試我的客戶端的執行情況。

wireshark我在dummy0介面上看到 DHCP 發現。我什麼也沒看到dummy1。另外:我在br0.

我認為可能有更好的方法可以做到這一點,你能告訴我如何做到這一點嗎?

“Boomerang 數據包”(從一個本地介面發送,在另一個本地介面接收)被認為是路由錯誤(在某處循環),預設情況下會被核心丟棄。

此外,虛擬設備使用起來很痛苦。

更好的方法:創建一個(或兩個)網路命名空間,在網路命名空間和主命名空間(或兩個網路命名空間)之間放置一個 veth 對。不需要橋樑。然後測試所有你想要的。

在每個命名空間中執行一個xterm,讓您的生活更輕鬆。

這是我用來執行此操作的腳本。隨意修改。

#!/bin/bash

# Setup network namespace with veth pair, start xterm in it

# nsterm ns0 veth0 10.0.0 yellow 24
#
# tested: yellow, lime, orange, cyan

if [[ $EUID -ne 0 ]]; then
  echo "This script must be run as root" 1>&2
  exit 1
fi

NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3:-10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}

# echo ns=$NS dev=$DEV col=$COL mask=$MASK

ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip link set lo up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" your_username

引用自:https://unix.stackexchange.com/questions/588515