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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Q&A

解決済

1回答

3492閲覧

ソケット通信プログラミンにて、特定のIPアドレスしか接続を確立できないようにする方法について

hawk_daily

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

0グッド

0クリップ

投稿2020/09/11 00:52

実現したいこと

皆様お世話になっております。

pythonによるソケット通信プログラミングにて、クライアントからの接続をIPアドレスでフィルタリングしたいです。
例えば、192.168.0.102:8888で待機しているサーバがあり、このサーバに接続できるクライアントは、あるIPアドレス(例えば192.168.0.202)を持ったクライアントしか接続できないようにしたいです。

そこで、下記ソースコードのように、一度クライアントからの接続をacceptしてコネクションを確立した後、accept()返却値からクライアントのIPアドレスを確認して、もし違ったらコネクションをクローズするようなプログラムを書いてみましたが、一般的にこの方法で合っているのかを知りたくてご質問させて頂きました。

試しに書いたソースコード

python

1#サーバ側 2import socket 3 4with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: 5 sock.bind(('192.168.0.102', 8888)) 6 sock.listen(10) 7 while True: 8 (connection, addr) = sock.accept() 9 #接続を許可するIPアドレス:192.168.0.202 10 if addr[0] != "192.168.0.202": 11 connection.close() 12 else: 13 try: 14 data = connection.recv(BUFFER_SIZE) 15 connection.send(data) 16 finally: 17 connection.close() 18

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

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

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

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

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

guest

回答1

0

ベストアンサー

これでいいと思いますが、ソケットの勉強目的でなければxinetdを使うと楽です。

上記プログラムで言うと、tryの中の2行を除いた部分をIPアドレス制限を含めてxinetdが受け持ちますので、処理の中身だけ書けば良いです。

ただし、TCPコネクションが張られる毎にユーザープログラムが起動されるので、高トラフィックの場合は良くないです。

投稿2020/09/11 02:24

otn

総合スコア85901

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

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

hawk_daily

2020/09/11 03:00

ご回答頂きありがとうございます。やはり一度acceptして確認するしかないのですね。 何か違う方法はないのかとも思っていましたので、「xinetd」をご教示頂きありがとうございます。簡単に調べた限りではlinuxの一つの機能なのでしょうか。。後ほどゆっくり調べたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問