
ping
テストしてコマンドするためにいくつかの実験をしたいですfping
(参照:Linuxの「ping -o」と同じ)が、これをテストするにはローカル仮想イーサネットインターフェイスが必要です。
私はping 10.0.0.1
(または他のIP)を実行して失敗する可能性があるシナリオが欲しいです。その後、実行を続けている間、ping
いくつかのコマンドを実行してインターフェイスを開いて渡します。つまり、出力がping
変更されます。実行時これは、仮想デバイスが「アクティブ」状態になるためです。物理的なハードウェアを使用したくありません。
どうすればいいですか?
私の指示に従って努力しました(物理アダプタなしでコンピュータに仮想イーサネットインターフェイスを作成するには?)、しかし残念ながら実行後もsudo ip link set eth10 down
eth10を介したpingはping 10.0.0.1
まだ成功しています。sudo ip link delete eth10 type dummy
ダミー仮想デバイスを削除するために実行した後もping 10.0.0.1
まだ成功しました。
これまでの機能的な回答の概要:
(2021年11月22日基準)
私の答えを含む3つの答えを受け取りました。3つの答えすべてが有効です。! :
- スティーブン・ハリス- ループバックサブインターフェースを使用してください(おそらくこれまでで最高の答えです)。
- 寄稿者: Hauke Larkin- iptablesを使う
- 私自身の答え- 仮想インターフェイスの使用
答え1
Linuxでは、lo(ループバック)のサブインターフェースを使用してこれを実行できます。
たとえば、1つのウィンドウで私は実行します。
% ping 10.200.200.1
PING 10.200.200.1 (10.200.200.1) 56(84) bytes of data.
住所に関する情報がないため、回答が届きませんでした。
別ウィンドウで
% sudo ifconfig lo:100 10.200.200.1 netmask 255.255.255.0 up
これでpingが応答し始めます。
64 bytes from 10.200.200.1: icmp_seq=25 ttl=64 time=0.058 ms
64 bytes from 10.200.200.1: icmp_seq=26 ttl=64 time=0.035 ms
64 bytes from 10.200.200.1: icmp_seq=27 ttl=64 time=0.037 ms
64 bytes from 10.200.200.1: icmp_seq=28 ttl=64 time=0.040 ms
だから私はできます
% sudo ifconfig lo:100 down
そしてpingが再び動作を停止しました。
基本的に私たちがすることは、ループバックインターフェイスに「サブインターフェイス」を追加することです。この場合は呼び出しますが、->をlo:100
選択できます。lo:1
lo:255
サブインターフェイスは、実際に同じインターフェイスに複数のアドレスを割り当てる方法です。たとえば、アドレスを割り当てると、コンピュータはeth0:1
物理インターフェイスに2つのアドレスを持ち、ネットワーク上の他のコンピュータは両方のアドレスからアクセスできます。これをlo
ループバックに入れることは、テストマシンだけが追加のアドレスを知り、残りのネットワークは影響を受けないことを意味します。
パケットレベルでは、すべてのトラフィックlo:100
はlo
。これは違う偽まったく新しいインターフェイスを作成し、インターフェイスへのトラフィックを分離します。
答え2
10.0.0.1
インターフェイスの 1 つを追加した場合は、次を使用してそのアドレスに ping パケットをドロップできます。
iptables -I OUTPUT 1 -p icmp --icmp-type echo-request -d 10.0.0.1 -j DROP
次のコマンドを使用してこのルールを削除できます。
iptables -D OUTPUT -p icmp --icmp-type echo-request -d 10.0.0.1 -j DROP
これら2つのコマンドを交互に実行して、2つの状態を切り替えることができます。
ping 10.0.0.1
以下は、パケットが通過し、ブロックされた後に再度通過することを示すいくつかのサンプル出力です。
$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=5.04 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=4.20 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=3.33 ms ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted 64 bytes from 10.0.0.1: icmp_seq=8 ttl=64 time=8.49 ms 64 bytes from 10.0.0.1: icmp_seq=9 ttl=64 time=3.33 ms 64 bytes from 10.0.0.1: icmp_seq=10 ttl=64 time=6.90 ms 64 bytes from 10.0.0.1: icmp_seq=11 ttl=64 time=6.91 ms ^C --- 10.0.0.1 ping statistics --- 11 packets transmitted, 7 received, 36% packet loss, time 10088ms rtt min/avg/max/mdev = 3.330/5.459/8.491/1.859 ms
答え3
@Hauke Lagingさんの言葉は正しいです私の質問に対する彼の意見から:
違いがある可能性があります
10.0.0.1
。ip route get 10.0.0.1
両方の場合の出力を比較してください。
ip route get 10.0.0.1
これを見せて今後仮想インターフェイスの削除:
local 10.0.0.1 dev lo src 10.0.0.1 uid 46153590
...パスが私が作成した仮想インターフェイスを通過することを提案し、次のように表示されます。後ろに以下を実行して仮想インターフェイスを削除しますsudo ip link delete eth10 type dummy
。
10.0.0.1 dev wlp0s20f3 src 10.0.0.36 uid 28301632
...これは、IPが私のwlp0s20f3
ワイヤレスカードを介してルーティングされていることを示します。私のローカルWiFiが10.0.0.x
IPアドレスを使用して割り当てているので、これは意味があると思います。
したがって、解決策は単に別のIPを選択することです。いいえ仮想インターフェイスを作成する前にpingを実行できます。私の場合は、10.0.0.100
代わりに使用するとうまく10.0.0.1
いきました。ただし、254.254.254.254
この例ではこれを使用します。
完全な例:
まず、使用したいIPアドレスが現在応答していないことを確認してくださいping
。
ping -c 1 -W 1 254.254.254.254
出力例:
PING 254.254.254.254 (254.254.254.254) 56(84) bytes of data. --- 254.254.254.254 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
これで仮想eth99
インターフェイスを作成します。 (すべての手順については、他の回答を参照してください。物理アダプタなしでコンピュータに仮想イーサネットインターフェイスを作成するには?):
sudo modprobe dummy \
&& sudo ip link add eth99 type dummy \
&& sudo ip address change dev eth10 254.254.254.254 \
&& ip address
これでpingができます。ランニングping 254.254.254.254
。例cmdと出力:
$ ping 254.254.254.254 PING 254.254.254.254 (254.254.254.254) 56(84) bytes of data. 64 bytes from 254.254.254.254: icmp_seq=1 ttl=64 time=0.086 ms 64 bytes from 254.254.254.254: icmp_seq=2 ttl=64 time=0.093 ms 64 bytes from 254.254.254.254: icmp_seq=3 ttl=64 time=0.086 ms 64 bytes from 254.254.254.254: icmp_seq=4 ttl=64 time=0.051 ms ^C --- 254.254.254.254 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3050ms rtt min/avg/max/mdev = 0.051/0.079/0.093/0.016 ms
ping 254.254.254.254
一方の端末で実行し、もう一方の端末で実行している場合、インターフェイスが削除されるsudo ip link delete eth99 type dummy
と、ping 応答の増加が停止します。sudo modprobe dummy; sudo ip link add eth99 type dummy; sudo ip address change dev eth99 254.254.254.254; ip address
再びインターフェイスが再生成され、pingが再び応答を開始します。