Created
August 19, 2021 14:14
-
-
Save snower/f2852ea703b2ddffbec48b0fa294ffff to your computer and use it in GitHub Desktop.
tcp2proxys
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# 2021/8/19 | |
# create by: snower | |
import argparse | |
import logging | |
import sevent | |
from sevent.helpers import tcp2proxy | |
class Argument(object): | |
def __init__(self, bind, port, timeout, proxy_type, proxy_host, forward_host): | |
self.bind = bind | |
self.port = port | |
self.timeout = timeout | |
self.proxy_type = proxy_type | |
self.proxy_host = proxy_host | |
self.forward_host = forward_host | |
async def run(args): | |
arguments = [ | |
Argument("0.0.0.0", 9090, args.timeout, "socks5", args.proxy_host, "github.com:443"), | |
# sudo echo '192.30.255.112 github.com' >> /etc/hosts | |
# sudo iptables -t nat -A OUTPUT -d 192.30.255.112 -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:9090 | |
Argument("0.0.0.0", 9091, args.timeout, "socks5", args.proxy_host, "raw.githubusercontent.com:443"), | |
# sudo echo '185.199.109.133 raw.githubusercontent.com' >> /etc/hosts | |
# sudo iptables -t nat -A OUTPUT -d 185.199.109.133 -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:9091 | |
] | |
for argument in arguments: | |
server = sevent.tcp.Server() | |
server.enable_reuseaddr() | |
server.listen((argument.bind, argument.port)) | |
sevent.current().call_async(tcp2proxy.tcp_accept, server, argument) | |
logging.info("listen server at %s:%d to %s", argument.bind, argument.port, argument.forward_host) | |
await sevent.Future() | |
if __name__ == '__main__': | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)1.1s %(message)s', | |
datefmt='%Y-%m-%d %H:%M:%S', filemode='a+') | |
tcp2proxy.config_signal() | |
parser = argparse.ArgumentParser(description='forword tcp ports to remote hosts from http or socks5 proxy') | |
parser.add_argument('-P', dest='proxy_host', default="127.0.0.1:8088", | |
help='proxy host, accept format [proxy_host:proxy_port] (default: 127.0.0.1:8088)') | |
parser.add_argument('-t', dest='timeout', default=7200, type=int, help='no read/write timeout (default: 7200)') | |
args = parser.parse_args() | |
try: | |
sevent.run(run, args) | |
except KeyboardInterrupt: | |
exit(0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment