C言語/C++の質問です。勉強のために NETSTAT コマンドと同じ機能を持つコマンドを作ろうと思います。そのときに必要な MFCのクラスとか SDKではどのような関数を使えばできるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/12/17 10:35:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:t_shiono No.1

回答回数256ベストアンサー獲得回数22

ポイント60pt

「C/C++」を勉強することと、「Win32やMFC」を勉強することは似ているようで全然違います。

どちらの意識が強いのか分かりませんが、netstatを選んだ理由などありますか?

どうしても、netstatを作成したいということであれば、まずはnetstatのソースコードをおっかけてはいかがですか?そのソースを例えばVC++などでビルドできるように修正していくというのは、一つ方法としてあるかもしれませんが・・・。オススメはできないかもです。

id:Vacuum

おっしゃっている意味がわかりません。ソースコードを追っかけるというのであれば、少なくともその場所を提示してははいかがですか?

2007/12/17 09:10:54
  • id:t_shiono
    確かに不親切な回答をしてしまったかもしれません。
    気分を害されてしまったら、すいません。

    netstatはnet-toolsというパッケージに含まれております。
    参考:http://www.linux.or.jp/JF/JFdocs/LFS-BOOK/appendixa/net-tools.html

    参考URLにもありますが、そのソースコードはここなどにあります。
    http://www.tazenda.demon.co.uk/phil/net-tools/

    最新版などがあるかもしれませんが、確認してません。


    さきほどの回答でいいたかったことは、
    「netstatを課題にWin32APIやMFCを勉強することはオススメしない」
    ということです。

    質問の雰囲気からですが、Windows上のネットワークプログラミングをしたいのではないかと推測させてもらったのですが、netstatはネットワークプログラミングというよりは、よりOSのコアな部分と関連します。

    次のURLの議論が参考になるかもしれません。
    http://m--takahashi.com/bbs/pastlog/12100/12005.html

  • id:Vacuum
    いえいえ、ご丁寧なご返事ありがとうございます。こちらこそご無礼ご容赦ください。
    当方も業務上、詳しくはいえませんが・・・いろいろ事情がございまして。
    ご質問の内容を誤解されたのは当方の非と思います。
    頂きました情報から、ある程度メドが付きそうなので、これにて質問を終了させていただきます。
    ※netstatはOSのコアな部分と関連します。→貴重な情報です。
  • id:cx20
    参考情報です。

    Windows の netstat.exe が使用している API は、
    「Dependency Walker」というツールを用いることで、ある程度推測することができます。
    (分かるのは、DLL 名と関数名だけなので、使い方は MSDN Library 等で調べる必要があります。)

    ■ Dependency Walker (depends.exe) Home Page
    http://www.dependencywalker.com/

    c:\windows\system32\WS2_32.DLL … Windows Socket 2.0 32-Bit DLL
    WSAStartup
    gethostname
    getnameinfo
    htons
    ntohl
    ntohs

    c:\windows\system32\IPHLPAPI.DLL … IP Helper API
    AllocateAndGetTcpExTable2FromStack
    AllocateAndGetTcpExTableFromStack
    AllocateAndGetUdpExTable2FromStack
    AllocateAndGetUdpExTableFromStack
    GetIcmpStatsFromStackEx
    GetIpStatsFromStackEx
    GetTcpStatsFromStackEx
    GetUdpStatsFromStackEx

    c:\windows\system32\SNMPAPI.DLL … SNMP Utility Library
    SnmpUtilMemAlloc
    SnmpUtilMemFree
    SnmpUtilOidCpy
    SnmpUtilVarBindFree
  • id:Vacuum
    ありがとうございます。このツールすごいですね。
    で。見てみましたが・・・う~ん、なんちゅう階層の深さでしょう・・・。いやはや手も足もでません。
  • id:cx20
    追加情報です。

    NETSTAT.EXE と同等の機能を持つサンプルがありました。

    ■ CodeGuru: Internet tools
    http://www.codeguru.com/cpp/i-n/network/basicnetworkoperations/article.php/c2437/

    どうやら、INETMIB1.DLL の SnmpExtensionQuery() という関数を使用して、情報を取得しているようです。
    NETSTAT.EXE も、Dependency Walker でプロファイル実行(プロファイル実行を行うと実行時に読み込まれた DLL を調べることができます)をしてみたところ、
    INETMIB1.DLL をロードしているようです。


    あと、

    > 階層の深さ

    ですが、EXE が直接呼び出しているのは、あくまでも、直近の DLL です。
    ですので、実際に EXE 自身が使っている DLL / 関数はそれ程多くないと思います。

    <依存関係の例>
    EXE → xxxランタイム → C ランタイム → Windows API

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません