pingで渋滞を発生させる方法

これまで2回にわたり、コマンドを使ってネットワークを混乱させる方法を紹介した。前々回はarpspoofコマンドを使ってIPアドレスを一時的に誤認させる方法、前回はそもそも誤ったIPアドレスを設定することでネットワークを混乱させる方法を取り上げた。今回は、pingコマンドを使った迷惑行為を取り上げる。

現在のインターネットまたはLANはその仕組み上、ネットワークを混乱させることが簡単にできる。帯域を使い切ることも容易だ。お行儀よく使うことが前提となっており、その気になればいくらでも迷惑な使い方ができてしまう仕組みになっているのだ。

例えば、pingコマンドは対象となるホストやネットワークに接続されたデバイスが生きているかを調べるために使われる基本的なツールの1つだ。pingはシステムのモニタリングにも使われる。しかし、ちょっと使い方を誤ると迷惑なこともできてしまう。

次のスクリプトはpingコマンドを並列に実行するものだ。短い周期でパケットを送信するpingコマンドを並列に実行することができる。ちょいと並列数を引き上げてやれば、すぐに帯域がオーバーフローの状態になる。

pingコマンドを並列で実行するためのスクリプト

#!/bin/sh

target=IPアドレス
para=並列数

for i in $(seq 1 $para)
do
    ping -i 0.2 -s 1400 $target &
done

wait

また、以下のスクリーンショットは別のターミナルでpingコマンドを実行したものだ。icmp_seqの値は連続しており、パケットロスが発生することなくpingコマンドが機能していることがわかる。

  • 正常にpingコマンドが機能している様子

    正常にpingコマンドが機能している様子

ここで先程のスクリプトを100並列で実行させてみると、次のように実行しておいたpingコマンドでパケットロスが発生するようになる。負荷が高くなって、パケットロスに陥るようになったわけだ。

  • スクリプトを実行するとpingコマンドにパケットロスが発生しはじめる

    スクリプトを実行するとpingコマンドにパケットロスが発生しはじめる

この状態で先程実行したスクリプトを終了すると、次のようにpingコマンドは正常に動作する状態に戻り、パケットロスは発生しなくなる。

  • パケットロスが発生せずに正常に戻ったpingコマンド

    パケットロスが発生せずに正常に戻ったpingコマンド

こんな感じで、ネットワークが不便な状態というのは簡単に作り出すことができる。しかも、高度な技術が必要というわけではなく、コマンドを実行するだけでよい。もちろん、知識や技術があったほうが的確な迷惑行為が可能だが、それはやらないほうがいい。

毎回書いているが、こうした行為は閉じた実験環境の中でやる分には問題ない。ネットワークがどのように動作しているのかを知る上で、こうしたコマンドとその結果を知っておくというのは大切なことだ。

しかし、実際に使われているネットワークで実行するとそれはただの迷惑行為でしかないので注意が必要だ。実際に使われているネットワーク環境では、くれぐれもこのような操作を実行しないようにしてほしい。