• ベストアンサー

相手のIPアドレスを取得する方法

相手のIPアドレスを取得する方法 1対1で、クロスのLANケーブルでつながっているPCの相手側のIPアドレスを取得する方法がわかる方、教えてください。 ちなみに、私が作成しているプログラムは以下のようなものです。 ある機器と通信するプログラムを、VisualC++で作成しています。 機器の中にはWindowsCEが入っています。制御するPCのOSは、XP、またはVista、または7です。 よろしくお願いします。

  • grgrq
  • お礼率35% (5/14)

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

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.3

通信相手とソケット確立を自分のプログラムでしているのなら、gethostbyaddr関数で調べられますが・・・ そもそもどーやって通信しているのか書いてないので、誰も正確な回答はできないと思います。

grgrq
質問者

補足

通信のプロトコルとしては、OPC通信というものを使用します。 機器側のIPアドレスが分かれば通信を確立することができます。 IPアドレスを調べる部分に関しては、OPC通信とは関係ありません。 これはこちらの事情なのですが、 機器の販売メーカーからは機器側のIPアドレスを探索するプログラムを提供されています。 現時点ではこれを使ってIPアドレスを調べて、当方のソフトウェアで使えるように設定しています。 IPアドレスを取得する部分を自分で作れれば、調べて入力する手間がなくなるため、とても助かります。 pingの応答はあるので、これで探索することはできそうですが、提供されているプログラムではpingで探索しているとは思えない速さで調べられるので、何か方法があるのかなぁと思いました。 ちなみに、機器の販売メーカーは教えてくれそうもありません。 こちらの事情ですみません。

その他の回答 (7)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.8

#5さんの回答で思い出しました・・・ 自分のPCにパケットキャプチャをインストールし、パケットをキャプチャできる状態でその相手PCのIPを探すソフトを走らせれば、どこのどのポートにアクセスしようとしているかはわかります。 そのあたりから探すのも1つの方法かと・・・

参考URL:
http://www.infraexpert.com/info/wiresharkindex.html
grgrq
質問者

お礼

お礼する場所が違うかもしれませんが。 提供されているプログラムで相手のホスト名を知るまたは変更できることがわかり、最初の方で教えて頂いたgethostbyname()でIPアドレスを取得できました。 問題は解決できそうです。 色々とありがとうございました。

  • notnot
  • ベストアンサー率47% (4844/10253)
回答No.7

TCP/IPのソケットレベルでプログラムを書いているなら、 int st = getpeername(SOCKET clsock,struct sockaddr *addr,int *addr_len); で、addrに相手アドレスが返ります。引数の詳細はマニュアル参照。 でも、こういうことがわからない人がソケットレベルでプログラミングしているとは思えませんので、たぶん、もっと上位の抽象化されたレベルのAPIを使っているんだと思います。 通信に使っているソケットを得るAPIがあれば、その値を使って上記関数を呼べばいいです。 「ソケット」という言葉の意味がわからなければ、ちょっと無理でしょうね。

grgrq
質問者

補足

回答ありがとうございます。 正直、理解できていませんが、調べてみます。

回答No.6

No3に一票。 そもそもIP通信の文化(歴史)として、 1.まずは、IPアドレスで繋ぐ。 2.1が面倒なのでhostsファイルにPC名とIPアドレスを記載し、   PC名だけで通信出来るようにする。 3.2の場合、全PCのhostsファイルを修正しなくてはいけないため   DNCで都度、PC名とIPアドレスのマップ情報を落とすようにする。 この経緯から、gethostbyaddrでホスト名(PC名)からIPアドレスが取得出来るようになっています。 機器側のホスト名を調べ、内部ネットワーク上にDNCサーバを立ち上げるかhostsに追加するプログラムを組むかしかないと思います。 特定のポートに対してブロードキャストしているような感じであれば、パケットキャプチャでしらべられるのでは?

回答No.5

そういうツールがあるのであればパケットをキャプチャすれば一発でわかるのでは?

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.4

>pingの応答はあるので、これで探索することはできそうですが、提供されているプログラムではpingで探索しているとは思えない速さで調べられるので、何か方法があるのかなぁと思いました。 その感じだと、特定のポートに対してブロードキャストを送信し、その機器が応答を返すことで検出しているみたいですね・・・ 機器提供側が公開しないのであれば、#2さんのような方法しか無い気がします。 回答になってなくてすみません。

grgrq
質問者

補足

回答ありがとうございます。 pingの応答を見る方法だと相当な時間がかかりそうです。 それ以外だとやはり機器提供側に公開してもらう以外になさそうですね。

回答No.2

ベタに考えると、ポーリングでpingを投げて応答の返ってくるIPをさがすという手があります。 ま、規格上存在するIPに全部投げるなんてことは現実的に無理ですが、クロスケーブルで1対1で繋がってるなら、おそらくプライベートIPの範囲内でしょうか。 また、IPアドレスの付与の仕方でも範囲が限定出来ます。組織内で固定的に割当基準が決まってるようなIPなら、その割当基準の範囲内のIPアドレスを探します。固定的なIPを割り当てずWindowsのAPIPA機能で自動割り当てをしているのなら、そのリンクローカルアドレスの範囲です。 もっとも相手がファイアウォール等の設定でpingに反応しないようになってると意味はありませんが。

grgrq
質問者

補足

回答ありがとうございます。 試してみようと思います。 サブネットマスクが「255.255.0.0」と設定されてあり、これを変えられるかどうかはまだ試していないのですが、変えられない場合、最大256×256個を探索しなければならず、結構時間がかかりそうなので、他に方法があればなぁと思っております。

noname#111181
noname#111181
回答No.1

netstatコマンドを使えばできます。

参考URL:
http://www.atmarkit.co.jp/fwin2k/win2ktips/234netstat/netstat.html
grgrq
質問者

補足

回答ありがとうございます。 すみません。私の要求に不備がありました。 相手のIPアドレスを取得するプログラムを、作りたいです。

関連するQ&A

  • IPアドレスの競合について

    私は現在、WindowsCEにてTCP通信アプリの作成を行っているのですが、ネットワーク上に同様のIPアドレスを使用したPCが有ると、PCには『IPアドレスが競合している』とダイアログが出るのですが、WindowsCE側には出てきません。なにかEmbededVC++の関数などで、IPの競合を検知する方法は有りませんでしょうか?

  • IPアドレスが正しく取得できない

    e-AccessでADSLを繋いでいます。 ルータを経由して2台のPCでインターネットを出来るようにしたいのですが、ルータの設定がおかしいのか、IPアドレスが正しく取得できないようです。 使用しているルータは、Aterm WBR75Hで無線LANなのですが、『らくらくアシスタント』という設定を使ってインターネットの設定をすると、WAN側のIPアドレスが『0.0.0.0』となり、これだとインターネットに接続できないようです。 ルータとPCの通信はうまくいっているようです。 モデムとルータは別々の機器なので、もしかしたらモデムとルータを繋ぐにはクロスケーブルでないといけないとか? 何度もルータの設定を見直しているのですが、おかしいと思われる箇所を見つけることが出来ません。 ご意見をお聞かせください。 よろしくお願いいたします。 PC:WinME

    • ベストアンサー
    • ADSL
  • C#でIPアドレスの取得について

    現在C#で、IPアドレスの取得で苦戦しています。 例えばNICが2枚ささっている状態で、 特定の通信先と通信を行っているNICのIPアドレスを取得するには どうすればいいでしょうか。 最終的には、通信を行っているIPアドレスから、 どちらのNICで通信を行っているか判別して そのNICのMACアドレスを取得したいです。 現在考えているのは、pingを通信先に飛ばしてその送信元のIPアドレスを取得するという事です。 ただ、これも実現方法がいまいち曖昧で、現在取得できていません・・・。 Pingを飛ばすところまではできているのですが、送信元のIPアドレスの取得のやり方がわかりません。 通信先は固定の予定なので、その通信先と通信する際に使用しているIPアドレスを知りたいです。 pingの送信元のIPアドレスを取得する方法、 またはほかに良い方法があれば教えていただけますでしょうか。 よろしくお願いします。

  • IPアドレスの取得方法

    ルータにPCを接続してDMZゾーンに置き、wwwサーバとしてHPを公開しています。 OSはWindowsXP Proです。 そこでプログラムを作成し、接続毎にDHCPで変化するグローバルIPアドレスを取得したいのですがどのように取得すればよいのでしょうか? 開発環境はVB6.0です。 よろしくお願いします。

  • IPアドレスについて教えてください。

    IPアドレスはパソコン一台一台にというよりも、通信機器一台一台についているとかんがえてよろしいでしょうか? 現在ドコモのワイファイ? どこでもインターネットにつなげることができる通信機器を使っているのですが、その通信機器を使っていれば、どのPCでネットを行っても同じIPアドレスということでしょうか?

  • IPアドレスの取得方法

    IPアドレスの取得方法を知っている方がいましたら教えてください。PCはXPを使っています。

  • グローバルIPアドレスの取得。

    自宅サーバで、CGIで作成したホームページを開設しています。 回線は光で、回線終端装置(ルータなどが含まれる)の不具合等で、終端装置をリセットすると、グローバルIPアドレスが、変わってしまい、CGIを何箇所も書き換えなければなりません。 グローバルIPをCGIで取得して、CGIで、IPを自動的に変更したいのですが、IPの取得はどうしたらできますか。 IPの取得部分のCGIプログラムが欲しいのですが。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 同一IPアドレスの機器

    SNMPで情報取得している機器があり、保守のために機器を一度ネットワークから切り離し、同一のIPアドレスにした別の機器を接続しようとしています。 試しにPCと同一IPの2台の機器を用意して、PCからSNMPWALKしたのですが、うまく取得できません。 やはりMACアドレスが異なるからなのでしょうか? 数十秒置いてから接続すると、通信できる様ですが、原理が良く解りません。 どなたかご教示願います。

  • IPアドレスが取得できません。

    XPでLAN内臓標準装備のPCです。IPアドレスが取得できません。友人に来てもらいノートPCとケーブルを持って来てもらい試すとちゃんとIPアドレスが取得でき、接続できるのです。 なぜIPアドレスが取得できないのでしようか?どこを確認すればよいですか?(ADSLはルーター型のADSLモデムです。) よろしく

  • グローバルな(?)IPアドレスの取得について

    Javaで自分のIPアドレスを取得するプログラムを作っているのですが どうやってもLAN内部のアドレスでしか取得できません 本当はWAN側のアドレスを取得したいのですが・・・ 誰か知っている人がいましたら教えてください Javaのバージョンは1.4でできるならなおよいですが1.6でも十分大丈夫です

    • ベストアンサー
    • Java