1

ifconfig コマンドを実行している Linux ボックスから出力を取得しています。shell_exec コマンドを実行してこれを行います。例を見つけましたが、それ以上作業できないようです。

これが私の現在のコードです。

public function get_network_interfaces() {

    // Run the command.
    $cmd_exec = shell_exec("/sbin/ifconfig");

    // Get the pattern.
    $pattern = '/inet addr:([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})/';

    if (preg_match_all($pattern, $cmd_exec, $matches)) {
        $interfaces = $matches[1];
        return $interfaces;         
    }

}

これの出力 (foreach'ing 後) は次のとおりです。192.168.1.1/127.0.0.1 には 2 つのネットワーク アダプターがあるため、ifconfig の出力は次のようになります。

eth0      Link encap:Ethernet  HWaddr 00:16:3e:38:b8:1c  
      inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: 2a02:2308::216:3eff:fe38:b81c/64 Scope:Global
      inet6 addr: fe80::216:3eff:fe38:b81c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:10612623 errors:0 dropped:0 overruns:0 frame:0
      TX packets:151855 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:539434883 (514.4 MiB)  TX bytes:37861938 (36.1 MiB)
      Interrupt:30
lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:6662 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6662 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:768641 (750.6 KiB)  TX bytes:768641 (750.6 KiB)

私が取得しようとしているのは、インターフェイスの名前 (eth0 と lo) と、inet の追加 (既に機能しています) の後に RX バイトと TX バイトが続くようなものです。名前を取得するのが難しすぎる場合は、そうしてください。しかし、誰かが RX バイトと TX バイトを取得する方法を説明できますか?

ありがとう。

4

1 に答える 1

1

インターフェイスの名前については、これが機能するはずです。

$pattern = '/^(\w*)\s*Link encap.*$/';

RX および TX バイトの場合:

$pattern = '/RX packets:(\d*) /';
$pattern = '/TX packets:(\d*) /';

また、すべてのインターフェイスのすべての情報を確実に取得するためにテストする必要があります。

  1. インターフェイスの名前をテストします。
  2. IP 番号をテストします。
  3. RX バイトをテストします。
  4. TX バイトをテストします。

そして、それらのうちの 4 つを取得したら、別のサイクルに進みます (たとえば、 を使用continue)。

PS システムで使用している言語に注意してください。スペイン語では "Paquetes RX:" と表示されるためです。念のため、コードをより堅牢にするために、たとえばshell_exec環境変数LC_MESSAGESを設定するようにしてください。en_us.utf-8

于 2011-11-05T03:16:01.220 に答える