本文是基于https://gitee.com/stlswm/transponder 这位大佬的源码的基础上,做的小工具
测试系统:
外网:linux
内网:windows
python:python3.6(需要安装flask、psutil)
功能介绍:使用flask,实现可一键添加端口映射,可以删除单端口,可删除全部端口映射

需要准备的东西:
1:如上的内网穿透工具:git clone https://gitee.com/stlswm/transponder.git
2:外网服务器 (需要安装 Nginx),开放端口 9000-9999
3:域名,需要泛域名,基本上是添加一个@.domain.com(没有的话可以使用ip+端口来访问)

外网服务器:
把 outer_server 中的二进制linux可执行文件main移动到随意文件夹,文件地址替换python中mainPath变量,

python文件

from flask import Flask
from flask import request
import os
import time
import random
import sys
import string
import psutil
import re
app = Flask(__name__)# 文件存放地址
mainPath="/root/go/src/transponder/outer_server/"
# ng配置文件存放地址
ngConfigPath="/www/server/panel/vhost/nginx/"
# 你的域名
domain="domain.com"#添加端口映射
@app.route('/add')
def add():# 设置端口信息if os.path.exists("./port.txt") == False:pf=open("./port.txt",'w')pf.write("9000")pf.closeport=9000else:portFile = open("./port.txt",'r')port=portFile.read()portFile.close()serverPort=int(port)+1# 端口信息存会文件中portFile = open("./port.txt",'w')portFile.write(str(serverPort))portFile.close()fileName="main" + str(serverPort)# 操作服务端 打包添加配置文件os.mkdir(mainPath+fileName+"s")os.system('cd '+mainPath+';cp -r main ./'+fileName+"s;cd "+fileName+"s;mv main "+fileName)fp = open(mainPath+fileName+"s/outer.config.json",'w')psd=random.randint(10000000000,90000000000)fp.write('{"InnerServerAddress": "tcp://0.0.0.0:'+str(serverPort)+'","OuterServerAddress": "unix:///var/run/'+fileName+'.sock","AuthKey": "'+str(psd)+'"}')fp.close()#操作ng  添加ng配置文件f=open(ngConfigPath+fileName+".conf","w")head=generate_random_str(6)f.write("server {listen 80;server_name  "+head+"."+domain+";access_log  /var/log/www.abc.com.access.log;error_log  /var/log/www.abc.com.error.log;location / {proxy_pass http://unix:/var/run/"+fileName+".sock:/;proxy_redirect     off;proxy_set_header   Host             $host;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;proxy_max_temp_file_size 0;proxy_connect_timeout      90;proxy_send_timeout         90;proxy_read_timeout         90;proxy_buffer_size          4k;proxy_buffers              4 32k;proxy_busy_buffers_size    64k;proxy_temp_file_write_size 64k;}}")f.close()os.system("nginx -s reload")os.system("cd "+mainPath+fileName+"s;nohup ./"+fileName+" &")f=open("./portAll.txt","a")f.write(","+fileName)f.close()return "<h1 style='margin-bottom:30px;'>启动成功</h1><br>服务器:119.45.136.232:"+str(serverPort)+"<br>客户端域名:http://"+head+"."+domain+"<br>秘钥:"+str(psd)#删除对应的外网端口
@app.route('/kill')
def kill():port = request.args.get("port")fileName="main"+str(port)pid=processinfo(fileName)if pid==False:return "没有找改进程"os.system("kill -9 "+str(pid))os.system("cd "+mainPath+";rm -rf "+fileName+"s")os.system("cd /run;rm  "+fileName+".sock")os.system("cd "+ngConfigPath+";rm "+fileName+".conf;nginx -s reload")return "操作成功!"#删除全部端口映射
@app.route('/killAll')
def killAll():if os.path.exists("./portAll.txt") == False:return "无端口映射"portFile = open("./portAll.txt",'r')portAllStr=portFile.read()portAllArr=portAllStr.split(",")myStr="<h1 style='margin-bottom:30px;'>操作成功</h1>"for v in portAllArr:if len(v) > 0:fileName=vpid=processinfo(fileName)if pid==False:myStr=myStr+"未找到进程:"+fileName+"<br>"else :myStr=myStr+"成功停止进程:"+fileName+"<br>"os.system("kill -9 "+str(pid))os.system("cd "+mainPath+";rm -rf "+fileName+"s")os.system("cd /run;rm "+fileName+".sock")os.system("cd "+ngConfigPath+";rm "+fileName+".conf;nginx -s reload")f=open("./portAll.txt","w")f.write("")f.close()f=open("./port.txt","w")f.write("9000")f.close()return myStr# 获取进程ID
def processinfo(processName):pids = psutil.pids()for pid in pids:# print(pid)p = psutil.Process(pid)# print(p.name)if p.name() == processName:# print(pid)return pid  # 如果找到该进程则打印它的PID,返回truereturn False  # 没有找到该进程,返回false# 随机生成字符串
def generate_random_str(randomlength):    '''    string.digits = 0123456789    string.ascii_letters = 26个小写,26个大写    '''    str_list = random.sample(string.digits + string.ascii_letters,randomlength)                   random_str = ''.join(str_list)    return random_strif __name__ == '__main__':app.run(host="0.0.0.0",port="8001")

内网:

对应git文件中的inner_server
请求:http://外网ip:8001/add
1:获取到服务器端口和客户端请求域名和秘钥,
2:对应的替换到config里的内容,配置好ProxyAddress的内网端口,
4:windows双击打开inner_server中的main.exe linux: ./main
3:使用域名就能访问到内网

使用python做内网穿透小工具实现花生壳功能,一键生成内网穿透端口映射相关推荐

  1. 用Python做一个房价预测小工具!

    哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...

  2. 用Python制作一个数据预处理小工具,多种操作,一键完成,非常实用!

    在我们平常使用Python进行数据处理与分析时,在import完一大堆库之后,就是对数据进行预览,查看数据是否出现了缺失值.重复值等异常情况,并进行处理. 本文将结合GUI工具PySimpleGUI, ...

  3. 为了撩妹用Python做了一个办公小工具,她说棒极了

    UI排版布局 主页通过分页栏来划分不同的界面,以及窗体最小化,最大化,关闭功能. 应用.网页直达页由简单的按钮组成,前后对正.左右标齐. 天气查询栏,有简单的"按钮.输入框.标签框" ...

  4. 用Python做一个房价预测小工具

    哈喽,大家好. 今天给大家介绍一个非常适合新手入门的机器学习实战案例. 这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目. 该案例有着解机器学习问题的完整流程,包含 ...

  5. 内网穿透实现外网访问内网SQL数据库(工具:花生壳)

    1.确认已开启数据库远程连接的允许. 2.开机数据库所在的电脑/服务器的防火墙,使其放通1433端口.

  6. 内网穿透软件对比——cpolar : 花生壳(中)

    系列文章 内网穿透软件对比--cpolar : 花生壳(上) 内网穿透软件对比--cpolar : 花生壳(中) 内网穿透软件对比--cpolar : 花生壳(下) 文章目录 系列文章 1. 前言 2 ...

  7. 内网穿透软件对比——cpolar : 花生壳(下)

    系列文章 内网穿透软件对比--cpolar : 花生壳(上) 内网穿透软件对比--cpolar : 花生壳(中) 内网穿透软件对比--cpolar : 花生壳(下) 文章目录 系列文章 1. 前言 2 ...

  8. python查询文件软件_Python小工具--多文件查找字符串fs

    前几天,在看Android的makefile时,为方便自己在make文件查找字符串,用perl写了个小工具,实现的功能就是在目录下的多个文本文件中查找字符串.那个工具在同事的帮助下,已经实现了不少功能 ...

  9. python 24位图转 8位_Python爬取PPT模板小工具下载-Python爬取PPT模板小工具免费版下载v1.0...

    由于很多PPT抓取工具都会因为版本问题无法使用,所以论坛大神就自己写了这款Python爬取PPT模板小工具,可以帮助用户轻松获取各种PPT模板,使用的时候注意一次只能下载一种类型.软件仅供交流学习,下 ...

最新文章

  1. 如何解决普通用户使用sudo找不到命令
  2. 检测到磁盘可能为uefi引导_重装系统win10提示磁盘布局不受UEFI固件支持怎么办...
  3. 值转换器IValueConverter
  4. 存图matlab,matlab中保存图片的方法
  5. struts2.0和jQuery1.5的json问题
  6. 周五,放松心情,听我来分享问题背后的背后(一)
  7. Hibernate 缓存机制详细分析
  8. 前端开发 html第三课 列表 超链接 相对路径 图片
  9. 悉尼大学计算机一年制硕士,悉尼大学一年制硕士
  10. 测试人员的绩效考核指标
  11. openwrt luci web解析
  12. android的Activity采用透明主题
  13. FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(下)
  14. 拓嘉启远电商:拼多多店铺怎样才具有竞争力
  15. 冷池机房给数据中心带来哪些好处
  16. java utl_java utl包详细讲解.doc
  17. Java日志框架-SLF4J入门
  18. spring+springboot认识
  19. PDF格式打印不了怎么办?
  20. 笑话大全爬虫实战笔记[xiaohua.zol.com.cn]

热门文章

  1. 型男的帅气秘诀绝对少不了这对CP
  2. C/C++ 实现屏幕绘制字体
  3. linux之fping命令
  4. 【LeetCode】1697. 检查边长度限制的路径是否存在
  5. 19:Structured Streaming:Windows操作和WaterMarker-流处理引擎提供了哪些优秀机制
  6. mongoDB的安装与启动
  7. 重装win10后的问题(打不开.chm文件,jdk的API)
  8. Android Uid,UserId,AppId,Pid
  9. 门控循环单元网络GRU详解
  10. 数据挖掘基础-2.中文分词