プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (4件)

補足見ました。

すみません、ちょっと勘違いしてたかもしれません。下のかた
が書いているように、accept()時にsock_addr構造体へのポインタを渡して得
られる情報がクライアント側の情報ですね。accept()で作られたソケットはサー
バのものなので、getsockname()では自分の情報しか得られないみたい。
失礼しました。
    • good
    • 0

acceptの第2引数ではダメなんですか?

    • good
    • 0

acceptの引数にscokaddr構造体へのポインタがありますよね。


ここにアドレス等の情報を受けますので、
これをsockaddr_in構造体へキャストして、
sin_addrメンバ変数を調べればよいかと。
    • good
    • 0

getsockname() というシステムコールを使います。

socketは非常に柔
軟でインターネット以外のネットワークにも対応していますから、
その先がやや手間です。

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

この回答への補足

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

acceptの時点で得られるsockaddrには
クライアント側のIPアドレスとポート番号が
入っていたのですが。。

補足日時:2000/12/01 10:51
    • good
    • 0
この回答へのお礼

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

お礼日時:-0001/11/30 00:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!