質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5022閲覧

pythonでサーバを立ち上げたサーバに接続を受けた時、接続元IPを得るには?

ustst

総合スコア31

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/25 08:25

編集2018/06/25 08:29

質問

pythonでサーバを立ち上げたサーバに接続を受けた時、接続元IPを得るには?

詳細

socketモジュールを使って特定のportで待つスクリプトを立ち上げます。
その時、接続してきた接続元のIPを取得したいです。

試したこと

とりあえず下記は無理でした。

python

1import socket 2 3sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 4sock.bind(("localhost", 9999)) 5sock.listen(1) 6conn, addr = sock.accept() 7print("address: %s" % sock.getpeername())

telnetした結果、python実行環境の標準出力に下記が出力

Traceback (most recent call last): File "test.py", line 8, in <module> print("address: %s" % sock.getpeername()) File "/usr/lib64/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 107] Transport endpoint is not connected

これは自分から外部に接続する時に使うものなんですかね。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Python

1conn, addr = sock.accept()

sock.acceptの戻り値のaddrに接続元のIPアドレスが入っています。

生socketでゴリゴリ開発するとデバック環境構築が大変なので、socketserverTCPServerを使用するかhttp.serverモジュールを使用することをお勧めします。http.serverならブラウザやREST Clientツールでデバック代用できるため。

投稿2018/06/25 15:18

編集2018/06/25 18:06
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ustst

2018/06/26 04:16

ありがとうございます。 ネットのsampleスクリプトから勉強してたのですが、socketserverなんてのもあるのですね。 調べたらsocketよりわかりやすいスクリプトになりそう・・・確認してみます。 なお現状では、やっぱりエラーが多いのでスーパーサーバに管理させて都度機動する形にしようかと妥協する方向で考えています。
guest

0

pythonでどういうサーバを立ち上げるかが不明ですが、socket使うならふつーにリモートIP読めるでしょ

投稿2018/06/25 15:16

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/06/25 15:23

し、しかし、、なんで質問から6時間以上経ってるのに回答がかぶるんだろうw
umyu

2018/06/25 15:26

生活サイクルが似ているとか?
ustst

2018/06/26 04:18

回答ありがとうございます。 socketのドキュメント等も見たつもりだったんですが、見つけられなかったもので。 おかげさまで、意図した動作をするようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問