SimpleHTTPServerでクライアントをIPアドレスで制限してみた

PythonでちょっとしたHTTPサーバ立てたいときの定番モジュールSimpleHTTPServer

ですが、接続するクライアントを制限する機能が付いてない。 昨今色々と物騒なので、特定の端末からのみ接続できるようにしました

むしろ何か認証とかhttpsなちゃんとしたサーバを使ったほうが良いかもですけれども

あと、ディレクトリリストを制限するの忘れてたので憶えてたら後でやります


import SimpleHTTPServer
import socket
import SocketServer
import re

#この正規表現にマッチするIPアドレスにだけ応答
pat=re.compile("(127\.0\.0\.1|192\.168\.0\.(1|2)+)")
#hostlist=["127.0.0.1","192.168.0.1","192.168.0.2"]

PORT = 8000
class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def send_head(self):
host, port = self.client_address[:2]
if pat.match(host): # if host in hostlist: のがよいかも
return SimpleHTTPServer.SimpleHTTPRequestHandler.send_head(self)
#else:
#ホントはここで何か例外を投げないといけないかも



httpd = SocketServer.TCPServer(("", PORT), MyHandler)

print "serving at port", PORT
httpd.serve_forever()