特定のIPアドレスからイーサネットインターフェイスを作成してpingを送信し、時には応答し、時には応答しないようにするにはどうすればよいですか?

特定のIPアドレスからイーサネットインターフェイスを作成してpingを送信し、時には応答し、時には応答しないようにするにはどうすればよいですか?

pingテストしてコマンドするためにいくつかの実験をしたいですfping(参照:Linuxの「ping -o」と同じ)が、これをテストするにはローカル仮想イーサネットインターフェイスが必要です。

私はping 10.0.0.1(または他のIP)を実行して失敗する可能性があるシナリオが欲しいです。その後、実行を続けている間、pingいくつかのコマンドを実行してインターフェイスを開いて渡します。つまり、出力がping変更されます。実行時これは、仮想デバイスが「アクティブ」状態になるためです。物理的なハードウェアを使用したくありません。

どうすればいいですか?

私の指示に従って努力しました(物理アダプタなしでコンピュータに仮想イーサネットインターフェイスを作成するには?)、しかし残念ながら実行後もsudo ip link set eth10 downeth10を介したpingはping 10.0.0.1まだ成功しています。sudo ip link delete eth10 type dummyダミー仮想デバイスを削除するために実行した後もping 10.0.0.1まだ成功しました。


これまでの機能的な回答の概要:

(2021年11月22日基準)

私の答えを含む3つの答えを受け取りました。3つの答えすべてが有効です。! :

  1. スティーブン・ハリス- ループバックサブインターフェースを使用してください(おそらくこれまでで最高の答えです)。
  2. 寄稿者: Hauke Larkin- iptablesを使う
  3. 私自身の答え- 仮想インターフェイスの使用

答え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:1lo:255

サブインターフェイスは、実際に同じインターフェイスに複数のアドレスを割り当てる方法です。たとえば、アドレスを割り当てると、コンピュータはeth0:1物理インターフェイスに2つのアドレスを持ち、ネットワーク上の他のコンピュータは両方のアドレスからアクセスできます。これをloループバックに入れることは、テストマシンだけが追加のアドレスを知り、残りのネットワークは影響を受けないことを意味します。

パケットレベルでは、すべてのトラフィックlo:100lo。これは違うまったく新しいインターフェイスを作成し、インターフェイスへのトラフィックを分離します。

答え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.1ip 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.xIPアドレスを使用して割り当てているので、これは意味があると思います。

したがって、解決策は単に別の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が再び応答を開始します。

関連情報