吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3517|回复: 12
收起左侧

[Python 转载] python小工具-流量转发器

[复制链接]
Voyage 发表于 2020-5-28 15:22
运行环境:
windows/linux python3.6
依赖库:IPy
转发器原理:将远程客户端接收到的流量转发到另一个目标机器,达到流量转发的目的。
使用方法:只需要在类实例化填写对应的值就行(本机监听端口,远程ip地址,远程接收端口,本机监听地址)
这里提供一个思路,具体的扩展可以自己加上去,比如ipv6的流量转发等

[Python] 纯文本查看 复制代码
# -*- encoding: utf-8 -*-
'''
@Author: Voyage
'''
from IPy import IP
from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
from threading import Thread


class NetForward(object):

    def __init__(self, listen_port, remote_ipaddr, remote_port, listen_addr="0.0.0.0"):
        #  listen_addr 本机监听地址 0.0.0.0 代表接收所有的流量
        #  listen_port 本机监听端口
        #  remote_ipaddr  远程ip地址
        #  remote_port 远程端口
        self.listen_addr = listen_addr
        self.listen_port = listen_port
        self.remote_ipaddr = remote_ipaddr
        self.remote_port = remote_port

    def init_check(self):
        try:
            IP(self.listen_addr)._ipversion
            IP(self.remote_ipaddr)._ipversion
        except:
            exit()
        if not isinstance(self.listen_port, int) or not isinstance(self.remote_port, int):
            print("端口必须为整数")
            exit()
        assert self.listen_port > 1 and self.listen_port <= 65535, "端口数必须在2-65535之间"
        assert self.remote_port > 1 and self.remote_port <= 65535, "端口数必须在2-65535之间"

    def socket_server(self):        # 本机监听socket
        local_server = socket(AF_INET, SOCK_STREAM)
        local_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        try:
            local_server.bind((self.listen_addr, self.listen_port))
        except Exception as e:
            print(e)
            return
        return local_server

    def socket_client(self):    # 本机客户端连接远程socket
        remote_conn = socket(AF_INET, SOCK_STREAM)
        try:
            remote_conn.connect((self.remote_ipaddr, self.remote_port))
        except Exception as e:
            print(e)
            return
        return remote_conn

    def deal_netflow(self, local_conn, remote_conn):
        if not local_conn or not remote_conn:
            return
        while True:
            try:
                data = local_conn.recv(4096)
            except Exception as e:
                print(e)
                break
            if not data:
                break
            try:
                remote_conn.sendall(data)
            except Exception as e:
                print(e)
                break
        local_conn.close()
        remote_conn.close()

    def tcp_request_deal(self, local_conn):     # 流量请求处理
        remote_conn = self.socket_client()
        if not remote_conn:
            return
        Thread(target=self.deal_netflow, args=(
            local_conn, remote_conn)).start()
        Thread(target=self.deal_netflow, args=(
            remote_conn, local_conn)).start()

    def listen(self):
        self.init_check()
        local_server = self.socket_server()
        if not local_server:
            return
        local_server.listen(30)
        print("local listen port:{0} remoteip:{1} remoteport:{2}".format(
            self.listen_port, self.remote_ipaddr, self.remote_port))
        while True:
            local_conn, local_addr = local_server.accept()
            Thread(target=self.tcp_request_deal, args=(local_conn,)).start()


if __name__ == "__main__":
    s = NetForward(12345, "************", 23456, "0.0.0.0")
    s.listen()

第一次发帖 请大佬多指教

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
hj170520 + 1 + 1 正好需要,谢谢
time仅此而已灬 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Voyage 发表于 2020-5-28 16:32
genzxc 发表于 2020-5-28 16:20
哎呀 那你这个东西引流是非常NB的吧 我想想啊 比如我两台机器 A B 设置A转到B 一个流量来了 我A B 各算一个 ...

最终的流量还是到B A只是代{过}{滤}理把流量转到B 。你说的引流,应该可以在一台机器上监听多个端口或者架多台机器 把流量都引到一个机器上
genzxc 发表于 2020-5-28 16:20
哎呀 那你这个东西引流是非常NB的吧 我想想啊 比如我两台机器 A B 设置A转到B 一个流量来了 我A B 各算一个流量还是只算到B?
qwert12358 发表于 2020-5-28 15:44
skyward 发表于 2020-5-28 15:50
反向代{过}{滤}理?
 楼主| Voyage 发表于 2020-5-28 15:52
qwert12358 发表于 2020-5-28 15:44
类似于内网穿透吗

可以这么说,不过这个工具没法做到,只是将流量转到另一台机器上。
 楼主| Voyage 发表于 2020-5-28 15:55
skyward 发表于 2020-5-28 15:50
反向代{过}{滤}理?

也可以这么说,因为访问到的并不是真实的服务器,而是转发后的服务器。
NvidiaChina 发表于 2020-5-28 16:47
这个看起来有点厉害
 楼主| Voyage 发表于 2020-5-28 18:03
NvidiaChina 发表于 2020-5-28 16:47
这个看起来有点厉害

没有没有
hj170520 发表于 2020-5-28 19:58
请问一下,这个流量转发,工作时是否需要一直运行呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-3 15:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表