-PR-
締切済み

相手のIPアドレスを知る手段

  • 暇なときにでも
  • 質問No.15264
  • 閲覧数522
  • ありがとう数11
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 25% (1/4)

C言語で、サーバーソケット(accept)でコネクションを確立した後、
接続された相手のIPアドレスを知る手段はありますでしょうか。
Javaでは、java.net.ServerSocketクラスの、getInetAddressという
メソッドを利用して知ることができるのですが、C言語ではどうして
いいのか分かりません。ご存知の方ご教授よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル11

ベストアンサー率 55% (155/280)

getsockname() というシステムコールを使います。socketは非常に柔
軟でインターネット以外のネットワークにも対応していますから、
その先がやや手間です。

このシステムコールで得られた sockaddr という構造体の
sa_family というメンバーを調べて、これが AF_INET だったら IP
接続であり、sockaddr_in という構造体にキャストすると、
sin_port と sin_addr にポート番号とIPアドレスが得られます。
sin_addr を inet_ntoa() に与えれば文字列標記も得られます。
補足コメント
tonbokun

お礼率 25% (1/4)

すみません。本日改めて実験してみたところ、
getsocknameで得られるsockaddrの内容は
サーバのIPアドレスとポート番号ではないでしょうか。

acceptの時点で得られるsockaddrには
クライアント側のIPアドレスとポート番号が
入っていたのですが。。
投稿日時 - 2000-12-01 10:51:34
お礼コメント
tonbokun

お礼率 25% (1/4)

なるほど。お教えの通り実験したら
みごとにできました。できないものと思い込んで
いたらJavaで出来たので、無知な自分にがっかりです。
かなり詳細に教えていただきましてありがとうございました。助かりました。
投稿日時 - 0000-00-00 00:00:00


  • 回答No.2
レベル10

ベストアンサー率 28% (42/146)

acceptの引数にscokaddr構造体へのポインタがありますよね。
ここにアドレス等の情報を受けますので、
これをsockaddr_in構造体へキャストして、
sin_addrメンバ変数を調べればよいかと。
  • 回答No.3
レベル13

ベストアンサー率 37% (570/1525)

acceptの第2引数ではダメなんですか?
  • 回答No.4
レベル11

ベストアンサー率 55% (155/280)

補足見ました。すみません、ちょっと勘違いしてたかもしれません。下のかた
が書いているように、accept()時にsock_addr構造体へのポインタを渡して得
られる情報がクライアント側の情報ですね。accept()で作られたソケットはサー
バのものなので、getsockname()では自分の情報しか得られないみたい。
失礼しました。
このQ&Aで解決しましたか?
関連するQ&A
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ