- ベストアンサー
相手のIPアドレスを取得する方法
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
通信相手とソケット確立を自分のプログラムでしているのなら、gethostbyaddr関数で調べられますが・・・ そもそもどーやって通信しているのか書いてないので、誰も正確な回答はできないと思います。
その他の回答 (7)
- reset_cat
- ベストアンサー率68% (94/138)
#5さんの回答で思い出しました・・・ 自分のPCにパケットキャプチャをインストールし、パケットをキャプチャできる状態でその相手PCのIPを探すソフトを走らせれば、どこのどのポートにアクセスしようとしているかはわかります。 そのあたりから探すのも1つの方法かと・・・
お礼
お礼する場所が違うかもしれませんが。 提供されているプログラムで相手のホスト名を知るまたは変更できることがわかり、最初の方で教えて頂いたgethostbyname()でIPアドレスを取得できました。 問題は解決できそうです。 色々とありがとうございました。
- notnot
- ベストアンサー率47% (4844/10253)
TCP/IPのソケットレベルでプログラムを書いているなら、 int st = getpeername(SOCKET clsock,struct sockaddr *addr,int *addr_len); で、addrに相手アドレスが返ります。引数の詳細はマニュアル参照。 でも、こういうことがわからない人がソケットレベルでプログラミングしているとは思えませんので、たぶん、もっと上位の抽象化されたレベルのAPIを使っているんだと思います。 通信に使っているソケットを得るAPIがあれば、その値を使って上記関数を呼べばいいです。 「ソケット」という言葉の意味がわからなければ、ちょっと無理でしょうね。
補足
回答ありがとうございます。 正直、理解できていませんが、調べてみます。
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
No3に一票。 そもそもIP通信の文化(歴史)として、 1.まずは、IPアドレスで繋ぐ。 2.1が面倒なのでhostsファイルにPC名とIPアドレスを記載し、 PC名だけで通信出来るようにする。 3.2の場合、全PCのhostsファイルを修正しなくてはいけないため DNCで都度、PC名とIPアドレスのマップ情報を落とすようにする。 この経緯から、gethostbyaddrでホスト名(PC名)からIPアドレスが取得出来るようになっています。 機器側のホスト名を調べ、内部ネットワーク上にDNCサーバを立ち上げるかhostsに追加するプログラムを組むかしかないと思います。 特定のポートに対してブロードキャストしているような感じであれば、パケットキャプチャでしらべられるのでは?
- wildcat-yp
- ベストアンサー率37% (303/813)
そういうツールがあるのであればパケットをキャプチャすれば一発でわかるのでは?
- reset_cat
- ベストアンサー率68% (94/138)
>pingの応答はあるので、これで探索することはできそうですが、提供されているプログラムではpingで探索しているとは思えない速さで調べられるので、何か方法があるのかなぁと思いました。 その感じだと、特定のポートに対してブロードキャストを送信し、その機器が応答を返すことで検出しているみたいですね・・・ 機器提供側が公開しないのであれば、#2さんのような方法しか無い気がします。 回答になってなくてすみません。
補足
回答ありがとうございます。 pingの応答を見る方法だと相当な時間がかかりそうです。 それ以外だとやはり機器提供側に公開してもらう以外になさそうですね。
- magicalpass
- ベストアンサー率58% (378/648)
ベタに考えると、ポーリングでpingを投げて応答の返ってくるIPをさがすという手があります。 ま、規格上存在するIPに全部投げるなんてことは現実的に無理ですが、クロスケーブルで1対1で繋がってるなら、おそらくプライベートIPの範囲内でしょうか。 また、IPアドレスの付与の仕方でも範囲が限定出来ます。組織内で固定的に割当基準が決まってるようなIPなら、その割当基準の範囲内のIPアドレスを探します。固定的なIPを割り当てずWindowsのAPIPA機能で自動割り当てをしているのなら、そのリンクローカルアドレスの範囲です。 もっとも相手がファイアウォール等の設定でpingに反応しないようになってると意味はありませんが。
補足
回答ありがとうございます。 試してみようと思います。 サブネットマスクが「255.255.0.0」と設定されてあり、これを変えられるかどうかはまだ試していないのですが、変えられない場合、最大256×256個を探索しなければならず、結構時間がかかりそうなので、他に方法があればなぁと思っております。
netstatコマンドを使えばできます。
補足
回答ありがとうございます。 すみません。私の要求に不備がありました。 相手のIPアドレスを取得するプログラムを、作りたいです。
関連するQ&A
- IPアドレスの競合について
私は現在、WindowsCEにてTCP通信アプリの作成を行っているのですが、ネットワーク上に同様のIPアドレスを使用したPCが有ると、PCには『IPアドレスが競合している』とダイアログが出るのですが、WindowsCE側には出てきません。なにかEmbededVC++の関数などで、IPの競合を検知する方法は有りませんでしょうか?
- 締切済み
- C・C++・C#
- 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アドレスを取得する方法、 またはほかに良い方法があれば教えていただけますでしょうか。 よろしくお願いします。
- 締切済み
- C・C++・C#
- IPアドレスの取得方法
ルータにPCを接続してDMZゾーンに置き、wwwサーバとしてHPを公開しています。 OSはWindowsXP Proです。 そこでプログラムを作成し、接続毎にDHCPで変化するグローバルIPアドレスを取得したいのですがどのように取得すればよいのでしょうか? 開発環境はVB6.0です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- IPアドレスについて教えてください。
IPアドレスはパソコン一台一台にというよりも、通信機器一台一台についているとかんがえてよろしいでしょうか? 現在ドコモのワイファイ? どこでもインターネットにつなげることができる通信機器を使っているのですが、その通信機器を使っていれば、どのPCでネットを行っても同じIPアドレスということでしょうか?
- ベストアンサー
- その他(インターネット接続・通信)
- グローバル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モデムです。) よろしく
- 締切済み
- ADSL
- グローバルな(?)IPアドレスの取得について
Javaで自分のIPアドレスを取得するプログラムを作っているのですが どうやってもLAN内部のアドレスでしか取得できません 本当はWAN側のアドレスを取得したいのですが・・・ 誰か知っている人がいましたら教えてください Javaのバージョンは1.4でできるならなおよいですが1.6でも十分大丈夫です
- ベストアンサー
- Java
補足
通信のプロトコルとしては、OPC通信というものを使用します。 機器側のIPアドレスが分かれば通信を確立することができます。 IPアドレスを調べる部分に関しては、OPC通信とは関係ありません。 これはこちらの事情なのですが、 機器の販売メーカーからは機器側のIPアドレスを探索するプログラムを提供されています。 現時点ではこれを使ってIPアドレスを調べて、当方のソフトウェアで使えるように設定しています。 IPアドレスを取得する部分を自分で作れれば、調べて入力する手間がなくなるため、とても助かります。 pingの応答はあるので、これで探索することはできそうですが、提供されているプログラムではpingで探索しているとは思えない速さで調べられるので、何か方法があるのかなぁと思いました。 ちなみに、機器の販売メーカーは教えてくれそうもありません。 こちらの事情ですみません。