• ベストアンサー

IPアドレス、サブネットマスク取得について

はじめまして、C言語によるネットワークプログラミングについてお聞きしたいことがあります。 windowsでc言語を使用し自分のIPアドレス・サブネットマスクを取得し、コンソール画面表示するプログラムを作りたいのです。unix系のosではなくても可能でしょうか?ご存知であればソースを載せて頂けると大変助かります。 また、自分はc言語はまだ初心者の域をでていないのでネットワークプログラミングに関する書籍等も教えていただければ幸いです。重ね重ね申し訳ありませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bird0214
  • ベストアンサー率100% (1/1)
回答No.2

こんにちは。 私も今winsockで簡単なプログラミングに挑戦中です。ここの掲示板にC言語のことで大変お世話になっています。 IPアドレスとホスト名の表示なら・・・分かります サブネットの表示方法はわかりませんが・・ごめんなさい。 以下のプログラムは、localName()という関数を自分で記述し、その中でIPアドレスとホスト名を表示しています。 #include <stdio.h> #include <winsock2.h> //自端末のIPアドレス&ホスト名の表示 int localName(){ int i = 0; HOSTENT *lpHost; // ホスト情報を格納する構造体 IN_ADDR inaddr; //IPアドレスを格納する構造体 char szBuf[256], szIP[16]; // ホスト名を保持、IPアドレスを保持 // ローカルマシンのホスト名を取得する gethostname(szBuf, (int)sizeof(szBuf)); printf("ホスト名=%s\n", szBuf); // ホスト情報を取得 lpHost = gethostbyname(szBuf); for(i = 0; lpHost->h_addr_list[i]; i++) { //IPアドレスを取得 memcpy(&inaddr, lpHost->h_addr_list[i], 4); strcpy(szIP, inet_ntoa(inaddr)); printf("IPアドレス=%s\n", szIP); } return 0; } int main(){ //WinSockの初期化 WSADATA wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { perror("WSAStartup Error\n"); return -1; } localName(); WSACleanup(); return 0; } サブネットの取得方法ですが・・・ちょっと私も初心者でして・・・分かりません。 テキストは、「猫でもわかるネットワークプログラミング」という本が分かりやすいですよ。でも、windowsプログラミングが分からないとちょっと理解しずらいです。(今現在、苦労中です^^;) ネットでも、UDPやTCPのエコープログラムのサンプルがたくさんあるので活用してみてください。

koraru202
質問者

お礼

回答有難うございます。ソースも書いて頂き、本当にありがとうございます!丁寧なコメントもあり、大変分かりやすかったです。 テキストの紹介も有難うございました。早速見てみようと思います^^

その他の回答 (2)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.3

GetIPAddrTableという関数を使えばIPアドレス関係の情報が取得出来ます。 実際のコードは参考URLを参照してください。

参考URL:
http://homepage2.nifty.com/spw/tips/GetIpTable.html
koraru202
質問者

補足

回答有難うございます。 早速URLを見たのですが、分からない点がありまして・・・。二重になってしまうのですが、質問してもよろしいでしょうか? ソースの1行目に「//iphlpapi.lib をリンクする必要がある」とあるのですが、サイトや書籍を見ても、どのような設定をしたらライブラリファイルをリンク出来るのかわかりません。OSはXPで、コンパイラはBorland C++ Compiler 5.5を使っています。お手数をおかけして申し訳ありませんが、教えていただけないでしょうか?

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

IPアドレスの表示なら参考URLにサンプルがあります。 書籍は知りませんがネット上の情報ならwinsockやソケット等で検索すればでてくると思います。 今検索したところ下記のサイトを見つけました↓ http://www.geekpage.jp/programming/winsock/

参考URL:
http://www.kumei.ne.jp/c_lang/intro/no_91.htm
koraru202
質問者

お礼

回答有難うございます。サイト参考にさせていただきました。 お恥ずかしい話、検索ワードも分からなかったので助かりました。

関連するQ&A

  • IPアドレス、サブネットマスク について

    こんにちは^^ シスアドについてなのですが IPアドレス:192.168.1.18 サブネットマスク:255.255.255.240 の場合、 ネットワークアドレス:192.168.1.16 パソコンに割り当てられないIPアドレス:192.168.1.16と192.168.1.31 であってますでしょうか? よろしくお願いします♪

  • サブネットマスクがいきなり255.255.0.0に

    タイトルの通りなんですが、LANを組んでいて、急に使えなくなったなと思い調べてみたところサブネットマスクが255.255.0.0になってました。 確かに今まではIPアドレスを自動取得で、サブネットマスクもオートで255.255.255.0となっていたんですが、winipcfgで調べたところやっぱり255.255.0.0になってるんです。 ネットワークのプロパティでIPアドレスとサブネットマスクを指定してあげるときちんと繋がるのですが、IPの指定はしたくないんです。 どうしたら元のように「IPアドレスを自動取得」にチェックを入れたままでサブネットマスクが255.255.255.0に戻りますか? ちなみにOSは98SEと、MEの二つです。 説明へたくそでごめんなさい。

  • IPアドレスのサブネットマスクの設定について教えてください。

    サブネットマスクの設定について教えてください。 【ネットワーク情報】 ・自分のホストがいるネットワーク(A)  10.4.0.0 255.255.0.0 (10.4.0.0/16) ・L3スイッチ  ネットワーク(A)は、VLAN40に属しています。  VLAN40 は、10.4.0.0/16 がIPアドレスの範囲です。  特にVLAN40 内ではアクセスコントロールはしていません。 上記ネットワーク上に、サーバーを立てました。 IPアドレスは、 10.4.255.30 で、MACアドレスにてDHCPサーバの予約で IPを配布しています。 念のため、サーバーにも手動でIPアドレスを振ろうと思っているのですが、 この場合のサブネットマスクは 255.255.255.0 で良いのでしょうか? それとも 255.255.0.0 にした方がよいのでしょうか? 255.255.255.0でサブネットマスクを設定しても、255.255.0.0 からアクセス出来る ような気がするのですが、どうなのでしょうか。 ご教授くださいますようお願い致します。

  • プライベートipアドレスのサブネットマスクについて

    プライベートipアドレスのサブネットマスクについてです。 そもそもプライベートipアドレスのサブネットマスクとipアドレスのサブネットマスクとの違いが分かりませんが、プライベートipアドレスのサブネットマスクはクラスA:255.0.0.0、クラスB:255.240.0.0、クラスC:255.255.255.0とならいましたがなぜクラスBは255.255.0.0ではないのでしょうか? これはまちがっているのでしょうか? よろしくお願いします。

  • サブネットマスクとネットワークアドレス

    ネットワークを勉強している大学生です。 サブネットマスクとネットワークアドレスの理解で自分の理解が正しいのか気になったので投稿させていただきます。 ご返答いただければ大変ありがたいです。 例えばあるグローバルIPアドレスを512個のサブネットに区切る際 サブネットマスクを192.168.0.1/30 この場合 サブネットマスク 255.255.255.252 に設定すると 1つのネットワークで 実際使えるIPは2個という理解でよいでしょうか? (先頭はネットワークアドレス,最終は使えないので4-2) となると 順番にネットワークアドレスを抽出していくと *ネットワークA 192.168.0.0 (192.168.0.0~192.168.0.3) *ネットワークB 192.168.0.4 (192.168.0.4~192.168.0.7) *ネットワークC 192.168.0.8 (192.168.0.8~192.168.0.11) *ネットワークD 192.168.0.12 (192.168.0.12~192.168.0.15) このように区切れば でそれぞれのネットワークアドレスは 192.168.0.0 192.168.0.2 192.168.0.4 192.168.0.8 192.168.0.12 ・・・ になると思うのですが、 この理解でよいでしょうか? ここでRIPでルーティングをする際にルータ(自分)にぶら下がっているネットワークアドレスを指定すればいいと思うのですが。 192.168.0.0 は受け付けてくれるのですが 192.168.0.2 をいれても受け付けてくれないんです(;;) それぞれのぶらさがっている2本の回線には 192.168.0.1/30 とか 192.168.0.5/30 で割り振っています。 これは何か回線だけじゃなくて、ルータのサブネットマスクが255.255.255.0になっているからでしょうか? (そう考えた根拠は 192.168.1.0とか192.168.0.2) だと受け付けてくれるんです. これはコマンドラインで設定してやらないといけないんでしょうか? 使っているネットワークシュミレーションソフトは パケットトレーサー(Paket Tracer ver.4.1)です。 うまくいかないってことで 私のサブネットとネットワークアドレスの理解のそのものが間違っている可能性もあるのかなと考え駄文失礼しました。 もし私の理解で正しいのであれば、ルータ(機器)のサブネットマスクをコマンドラインから入力する方法をご教授いただければ幸いです。 よろしくお願い致します。

  • 元のipアドレス、サブネットマスクを確認したい。

    ’次のipアドレスを使う’にipアドレス、サブネットマスクを入力していたが、自動的に取得に換えた為、ipアドレス、サブネットマスクがきえました。消えたipアドレス、サブネットマスクを確認する方法はありますか。

  • サブネットマスク

    サブネットマスクについて教えてください。 IPアドレス;200.1.1.0 サブネットマスク;255.255.255.240 この場合16のネットワークがつくることができ、 1ネットワークごとに14のホストを持つということでよろしいでしょうか?

  • サブネットマスク

    サブネットマスクについて勉強しておりますが、イマイチよくわかりません。 サブネットマスクはIPアドレスのネットワークアドレスを調べるためだけにあるのですか? よろしくお願いします。

  • 同じサブネットに属するIPアドレス

    IPアドレスが192.168.1.34のPCと同じサブネットに属するIPアドレスはどこまでかを求めよ.ただしサブネットマスクは255.255.255.240が設定されているものとする. という問題が出たのですが,答えを聞いてもいまいちわかりませんでした. サブネットマスクの240の部分→11110000,よってホスト部が0000で14台. だから192.168.1.34の34+14で192.168.1.48までが同じサブネット,という考えでいいのでしょうか. 説明ではネットワークアドレスを求めていたようなのですが,求める必要があるのかがわかりません.

  • IPアドレスとサブネットマスクについて

    すでに構築されているネットワークを任されることになってしまったのですが、 IPアドレスとサブネットマスクの関係について質問させて頂きます。 現在はパソコンが20台程度なのですが、今後増える予定があります。 実際にあるPCに割り振られているのが、192.168.1.32/26(255.255.255.192)です。 前任者がいなくなってしまったので、なぜサブネットが26なのかがわかりません。 どこかのHPで、クラスCのサブネット26だと、 第4オクテットが、 0~63 64~127 128~191 192~255 になるとの記載がありました。 これは、例えば192.168.1.32のパソコンから 192.168.1.64のパソコンへはアクセスできないという事なのでしょうか? そういう事だとすると、 サブネットが26だと、4つのグループに分けることが出来るということでしょうか? 例えば経理部・総務部・営業部・企画部など部署ごとに分けて、 サーバーなど4つのグループがアクセス可能にさせたい機器に関しては、 サブネット24(255.255.255.0)にするという事で理解してよいのでしょうか?

専門家に質問してみよう