カスタムC / C ++プログラムでPPP0インターフェイスのTx / Rxバイトを取得する最も簡単な方法は何ですか?

ロドルフォコンデ

C / C ++プログラムで3つのネットワークインターフェイスに関する情報をTx / Rxで表示する必要があります。それらの1つはpppインターフェースですが、私のコードはppp0で機能していません。

getifaddrsのmanページ(man getifaddrsを参照のコード例を使用しています。これは基本的に、インターフェイスにAF_PACKETファミリがあるかどうかを確認し、ある場合は、ifaddrs構造体のifa-> ifa_dataメンバーからTx / Rx情報を取得します。 。ただし、このコードはppp0インターフェイスでは失敗します。インターネットを検索して、pppstatsのソースコードを見つけましたが、条件付きコードコンパイル用のifdefが多数あるため、コードがやや面倒です。ioctlを使用する必要があるようですが、正確な方法がわかりません。

Linuxシステムでppp0からTx / Rxバイト情報を取得するための最も簡単なコードは何でしょうか?本当にioctlを使用する必要がありますか?

前もって感謝します

bunto1

私は現在同じ状況にあり、今日この問題に関する調査とコーディングに時間を費やしました。私もpppstatsソースコードを見ることから始めました

Linuxシステムでppp0からTx / Rxバイト情報を取得するための最も簡単なコードは何でしょうか?本当にioctlを使用する必要がありますか?

私はあなたの正確な質問に本当に答えることはできませんが、ここに私がppp0インターフェースでRX / TXバイトを読み取るために終わった(c ++)コードがあります:

#include <linux/if_ppp.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <unistd.h>
{
    auto sockfd = ::socket(PF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        std::cout << "couldn't open socket : " << errno << std::endl;
        return;
    }

    ifreq req {};
    ppp_stats stats {};

    req.ifr_data = reinterpret_cast<caddr_t>(&stats);
    ::strncpy(&req.ifr_name[0], "ppp0", sizeof(req.ifr_name));

    auto ret = ::ioctl(sockfd, SIOCGPPPSTATS, &req);
    if (ret < 0) {
        std::cout << "couldn't get PPP statistics : " << errno << std::endl;
    } else {
        std::cout << "received bytes : " << stats.p.ppp_ibytes << std::endl;
        std::cout << "sent bytes : " << stats.p.ppp_obytes << std::endl;
    }

    auto ret = ::close(sockfd);
    if (ret != 0) {
        std::cout << "couldn't close socket : " << errno << std::endl;
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C-メイン関数をテストする最も簡単な方法は何ですか?

分類Dev

何百ものオブジェクトが存在する可能性がある場合、C#で複数のインスタンスとそのプロパティを初期化する最も簡単な方法は何ですか?

分類Dev

C#でWebSocketサーバーを作成する最も簡単な方法は何ですか?

分類Dev

C ++プログラムをクラッシュさせる最も簡単な方法は何ですか?

分類Dev

Zedboard で C++ プログラムのタイム パフォーマンスをチェックする方法

分類Dev

C ++でランダムな整数を取得するための最短かつ最も簡単な方法は何ですか?

分類Dev

Cを使用して802.11フレームを送信する最も簡単な方法は何ですか?

分類Dev

Macでyyyy-mm-ddhh:mm:ssタイムスタンプホットキーを取得する最も簡単な方法は何ですか?

分類Dev

Windows / C ++でUSBTMCデバイスを制御する最も簡単な方法

分類Dev

ジェネリック引数をリセットしてランタイムタイプを取得する最も簡単な方法は何でしょうか?

分類Dev

C ++でwpa_supplicantとインターフェースするための外部プログラムの作成

分類Dev

ファイルをJavascriptプログラムにリンクする最も簡単な方法は何ですか?

分類Dev

テレグラムボットをWebにデプロイする最も簡単な方法は何ですか?

分類Dev

Dockerを使用して単一のNodeJSスクリプトを実行し、Ctrl-Cで終了できる最も簡単な方法は何ですか?

分類Dev

暗号化の目的でCで疑似乱数を生成する最も簡単な方法は何ですか?

分類Dev

カスタムインバウンドチャネルアダプタを実装する最も簡単な方法は何でしょうか?

分類Dev

C#でインラインXAMLを使用して、コードビハインドでカスタムオブジェクトを簡単に作成する方法

分類Dev

Drupalをローカルにインストールする最も簡単な方法は何ですか?

分類Dev

二分木c#でノードのインデックスを取得する最も簡単な方法

分類Dev

C ++のインターフェースが「データ」と「プログラム」の間の通信用であると考えるのは合理的ですか?

分類Dev

CコールバックをC ++ 11インターフェイスでラップする最良の方法は何ですか?

分類Dev

org.w3c.dom.Documentをstdoutにきれいに出力する最も簡単な方法は何ですか?

分類Dev

カスタムデータフィールドからのCでのUnixタイムスタンプの作成

分類Dev

C#でメソッド名を動的に取得するための最も簡単で安価な方法は何ですか?

分類Dev

LinuxでCを使用してインターフェイスMTUをプログラムで設定する方法はありますか?

分類Dev

WPFでデータバインドされたラジオボタンリストを作成する最も簡単な方法は何ですか

分類Dev

Docker:プライベートレジストリを保護する最も簡単な方法は何ですか?

分類Dev

jestでイベントリスナーをテストする最も簡単な方法は何ですか?

分類Dev

C ++-nullポインタをテストする最も効率的な方法は何ですか?

Related 関連記事

  1. 1

    C-メイン関数をテストする最も簡単な方法は何ですか?

  2. 2

    何百ものオブジェクトが存在する可能性がある場合、C#で複数のインスタンスとそのプロパティを初期化する最も簡単な方法は何ですか?

  3. 3

    C#でWebSocketサーバーを作成する最も簡単な方法は何ですか?

  4. 4

    C ++プログラムをクラッシュさせる最も簡単な方法は何ですか?

  5. 5

    Zedboard で C++ プログラムのタイム パフォーマンスをチェックする方法

  6. 6

    C ++でランダムな整数を取得するための最短かつ最も簡単な方法は何ですか?

  7. 7

    Cを使用して802.11フレームを送信する最も簡単な方法は何ですか?

  8. 8

    Macでyyyy-mm-ddhh:mm:ssタイムスタンプホットキーを取得する最も簡単な方法は何ですか?

  9. 9

    Windows / C ++でUSBTMCデバイスを制御する最も簡単な方法

  10. 10

    ジェネリック引数をリセットしてランタイムタイプを取得する最も簡単な方法は何でしょうか?

  11. 11

    C ++でwpa_supplicantとインターフェースするための外部プログラムの作成

  12. 12

    ファイルをJavascriptプログラムにリンクする最も簡単な方法は何ですか?

  13. 13

    テレグラムボットをWebにデプロイする最も簡単な方法は何ですか?

  14. 14

    Dockerを使用して単一のNodeJSスクリプトを実行し、Ctrl-Cで終了できる最も簡単な方法は何ですか?

  15. 15

    暗号化の目的でCで疑似乱数を生成する最も簡単な方法は何ですか?

  16. 16

    カスタムインバウンドチャネルアダプタを実装する最も簡単な方法は何でしょうか?

  17. 17

    C#でインラインXAMLを使用して、コードビハインドでカスタムオブジェクトを簡単に作成する方法

  18. 18

    Drupalをローカルにインストールする最も簡単な方法は何ですか?

  19. 19

    二分木c#でノードのインデックスを取得する最も簡単な方法

  20. 20

    C ++のインターフェースが「データ」と「プログラム」の間の通信用であると考えるのは合理的ですか?

  21. 21

    CコールバックをC ++ 11インターフェイスでラップする最良の方法は何ですか?

  22. 22

    org.w3c.dom.Documentをstdoutにきれいに出力する最も簡単な方法は何ですか?

  23. 23

    カスタムデータフィールドからのCでのUnixタイムスタンプの作成

  24. 24

    C#でメソッド名を動的に取得するための最も簡単で安価な方法は何ですか?

  25. 25

    LinuxでCを使用してインターフェイスMTUをプログラムで設定する方法はありますか?

  26. 26

    WPFでデータバインドされたラジオボタンリストを作成する最も簡単な方法は何ですか

  27. 27

    Docker:プライベートレジストリを保護する最も簡単な方法は何ですか?

  28. 28

    jestでイベントリスナーをテストする最も簡単な方法は何ですか?

  29. 29

    C ++-nullポインタをテストする最も効率的な方法は何ですか?

ホットタグ

アーカイブ