Ubuntu
在一個介面上發送數據包並在另一個介面上接收它以進行測試
我想測試我在 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