限制 NetCat 监听特定网络

限制 NetCat 监听特定网络

我希望得到您的帮助,弄清楚如何使用 NetCat 监听特定端口,仅接受来自特定网络中主机的连接。我有一台服务器,我想仅使用 NetCat(或任何其他工具)与一组客户端共享文件。

谢谢。

答案1

我弄清楚了如何使用 RedHat 的 netcat 版本,使用下面的命令行:

nc -l --allow "IPs" -p "端口号"

例子:

nc -l --allow 192.168.0.10,192.168.0.15 -p 8080

任何其他尝试连接的不同 IP 都将被拒绝。

答案2

如果你安装了 netcat-openbsd 而不是 netcat-traditional(这些特定名称来自 Debian),那么你可以监听特定的地址:

nc -l 192.168.5.6 9999

但是这不会验证源地址以防止其他网络访问它。它只是限制哪个本地地址,这对限制接口有用,但对源地址没有限制。

要限制源地址,您需要使用更多工具,例如 iptables。或者在 Web 服务器配置中设置规则(例如 apache、nginx、lighttpd)。

或者一个 Python 程序。这是我之前为某人写的一个简单的 Python 示例,经过修改后可检查客户端地址并发送文件(无任何缓存):

#!/usr/bin/env python3
#
# Just a skeleton tcp server that accepts infinite connections and ignores all data

import socketserver

listen_address = "localhost"
port = 9999

def log(message):
    print("%s" % (message))

class ListenerHandler(socketserver.BaseRequestHandler):
    # For handling input
    def handle(self):
        print("handling client %s" % (str(self.client_address)))

        if self.client_address[0] == "127.0.0.1":
            print("ok")

            with open("somefile", "rb") as f:
                while True:
                    data = f.read(1024)
                    if not data:
                        break
                    self.request.send(data)

        else:
            print("rejected")


class ListenerServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

def run_server():
    socketserver.ThreadingMixIn.allow_reuse_address = True
    socketserver.TCPServer.allow_reuse_address = True

    server = None
    try:
        server = ListenerServer((listen_address, port), ListenerHandler)
        log("Starting server... hit ctrl+c to exit")
        server.serve_forever()
    except KeyboardInterrupt as e:
        log("Stopping server...")
        server.shutdown()
        exit(0)

if __name__ == "__main__":
    run_server()

相关内容