家庭网络代理服务器

家庭网络代理服务器

首先,我的设置:

  1. 有线调制解调器和 Fritz!Box 将我连接到互联网
  2. 通过网线连接到 Fritz Box 的 PC
  3. 多个 Wi-Fi 设备也连接到 Fritz Box

我想要实现的目标如下:我想在一台单独的机器上设置类似网络代理服务器的东西,它可以拦截并(可能)中继我网络中任何设备与互联网之间的所有流量。我不关心网络中设备之间的流量。我不想局限于某个协议/端口/ IP 地址上的消息。我的主要目标是了解网络/协议等,并在该代理服务器上实现多个应用程序/试用。示例可以是:

  • 收集所有正在进行通信的 IP / 端口的统计信息(因此,基本上转发所有流量并进行一些计数)
  • 阻止某些流量(例如,根据 IP 地址阻止孩子访问他们不应该看到的内容。阻止软件发送有关我的隐私相关数据。)
  • 警告我家庭网络中的新设备(例如,有人滥用我的 Wi-Fi)
  • 在转发邮件之前进行更改(例如,在收到的网页内容中添加文本)
  • 将自己的消息发送到互联网上的服务器或连接的设备之一(例如,收集使用情况统计信息以显示在 Web 界面上)
  • 还有很多 ...

假设我有一台可用的 Unix (/ Linux) 机器:

  • 网络设置:需要什么样的网络拓扑?我需要将代理机器放置在网络的哪个位置?
  • 设置:我需要在代理上配置什么才能接收和转发所有传入和传出流量?我不想更改主机设备上的设置。将它们连接到网络就足够了。
  • 可编程性:为了使用 Python 读取/修改/写入/发送/阻止消息/数据包,我还需要进行哪些设置?
  • 限制:这样的设置是否会对我的网络速度造成严重影响?

--- 编辑 --- 我取得了一些进展,并创建了一个接受传入连接的 Python 脚本。此外,我设置了另一台机器的 wifi 连接,以使用第一台机器作为网关。我现在成功接收了消息,但问题是,我不知道它们实际上应该发送到哪里。我假设我必须更改套接字配置并使用透明代理,但我没有找到太多关于如何在 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

以下是一些建议:

1) 首先,访问家庭网关 (FritzBox) 的管理页面。通常是通过浏览器以用户名/密码连接到 192.168.1.1。查看 WAN、LAN、Wifi 的设置并阅读相关信息。

2)安装 Linux 和命令行工具:tcpdump、netstat、nc、telnet

3)准备另一台带有用户界面的 Windows / Linux 机器,在那里安装 Wireshark

4)尝试开发一些简单的python 套接字级程序(python 套接字库非常适合 C 套接字 API)

5)使用 tcpdump 记录不同计算机上程序之间的流量,并使用 Wireshark 检查数据包

6) 尝试向您的家庭 LAN 网络添加代理服务器(专用机器)。

7)安装 Apache 网络服务器、CuteFTP、SMPT Relay、MiniDLNA 等程序...

你可以使用我的奇茨希特用于 Linux 实验网络相关的东西

8) 尝试创建您自己的 SSL 证书,以保护您网络中计算机之间的连接。

对您问题的回答:

网络设置:代理像其他任何机器一样放置在网络上。但所有机器都引用它(将其用作“网关”)。

设置:所有机器都需要通过配置参数获知代理(端口、地址)。

可编程性:无。它可以开箱即用。

限制:这样的设置是否会对我的网络速度造成严重影响?不会。

相关内容