まず、私の設定:
これが私が達成したいことです:私は別のマシン上にネットワークプロキシサーバーのようなものをセットアップしたいと思います。それは私のネットワーク内の任意のデバイスとインターネットの間のすべてのトラフィックを傍受し、(潜在的に)中継します。ネットワーク内のデバイス間のトラフィックは気にしません。特定のプロトコル/ポート/ IPアドレスのメッセージに制限されたくありません。私の主な目標は、ネットワーク/プロトコルなどについて学び、そのプロキシサーバーで複数のアプリケーションを実装したり遊んだりすることです。例は次のとおりです。
Unix(/ Linux)マシンが利用可能であると仮定します。
---編集---少し進歩し、着信接続を受け入れるpythonスクリプトを作成しました。さらに、別のマシンのWi-Fi接続を、最初のマシンをゲートウェイとして使用するように設定しました。I今は正常にメッセージを受信できますが、問題は、実際にどこにメッセージを送信すればよいかわからないことです。ソケット構成を変更して透過プロキシを使用する必要があると思いますが、あまりわかりませんでした。実際にPythonでこれを行う方法。また、私のスクリプトは現在Macで実行されているため、ソケットのすべてのオプションが利用できるとは限りません。
私の現在のスニペットの下:
import socket
def received_from(sock, timeout):
dt = ""
sock.settimeout(timeout)
try:
while True:
dt = sock.recv(4096)
if not dt:
break
dt = + dt
except:
pass
return dt
def hexdump(data, length=16):
filter = ''.join([(len(repr(chr(x))) == 3) and chr(x) or '.' for x in range(256)])
lines = []
digits = 4 if isinstance(data, str) else 2
for c in range(0, len(data), length):
chars = data[c:c+length]
hex = ' '.join(["%0*x" % (digits, (x)) for x in chars])
printable = ''.join(["%s" % (((x) <= 127 and filter[(x)]) or '.') for x in chars])
lines.append("%04x %-*s %s\n" % (c, length*3, hex, printable))
print(''.join(lines))
s = socket.socket()
print("Socket successfully created")
try:
port = 12222
s.bind(('', port))
print("socket bound to port {}".format(port))
s.listen(5)
print("socket listening")
print("proxy sock: {}".format(s.getsockname()))
while True:
try:
c, addr = s.accept()
print("got connection from {}".format(addr))
print("client peer: {}".format(c.getpeername()))
print("client sock: {}".format(c.getsockname()))
data = received_from(c, 3)
hexdump(data)
print()
c.send("Connection received. Thanks and bye!".encode('utf-8'))
c.close()
except Exception as e:
c.close()
raise e
except Exception as e:
s.close()
raise e
ここにいくつかの提案があります:
1)まず、ホームゲートウェイ(FritzBox)の管理ページにアクセスします。通常は、ブラウザを介した192.168.1.1へのユーザー名/パスワード接続です。 WAN、LAN、Wifiの設定を確認し、それについて読んでください。
2)Linuxおよびコマンドラインツールをインストールします:tcpdump、netstat、nc、telnet
3)ユーザーインターフェイスを備えた別のマシンウィンドウ/ Linuxを用意し、そこにWiresharkをインストールします
4)いくつかの単純な pythonソケットレベルのプログラム (pythonソケットライブラリはCソケットAPIにうまく適合します)を開発してみてください
5)tcpdumpを使用して異なるコンピューター上のプログラム間のトラフィックを記録し、Wiresharkを使用してパッケージを調べます
6)ホームLANネットワークにプロキシサーバー(専用機)を追加してみてください。
7)Apache Webサーバー、CuteFTP、SMPTリレー、MiniDLNAなどのプログラムをインストールします...
Linux用のmy cheetsheat を使用して、ネットワーク関連のものを試すことができます
8)ネットワーク内のコンピューター間の接続を保護するために、独自のSSL証明書を作成してみてください。
あなたの質問への回答:
ネットワーク設定:プロキシは他のマシンと同じようにネットワーク上に配置されます。しかし、すべてのマシンがそれを参照しています(「ゲートウェイ」として使用してください)。
設定:すべてのマシンは、構成パラメーターを介してプロキシ(ポート、アドレス)を通知される必要があります。
プログラマビリティ:なし。箱から出して動作します。
制限事項:このような設定は、ネットワーク速度に深刻な影響を与えることを意味しますか?番号。