測試系統(tǒng):
外網(wǎng):linux
內(nèi)網(wǎng):windows
python:python3.6(需要安裝flask、psutil)
功能介紹:使用flask,實現(xiàn)可一鍵添加端口映射,可以刪除單端口,可刪除全部端口映射
需要準備的東西:
1:如上的內(nèi)網(wǎng)穿透工具:git clone https://gitee.com/stlswm/transponder.git
2:外網(wǎng)服務器 (需要安裝 Nginx),開放端口 9000-9999
3:域名,需要泛域名,基本上是添加一個@.domain.com(沒有的話可以使用ip+端口來訪問)
外網(wǎng)服務器:
把 outer_server 中的二進制linux可執(zhí)行文件main移動到隨意文件夾,文件地址替換python中mainPath變量,
python文件
測試系統(tǒng):
外網(wǎng):linux
內(nèi)網(wǎng):windows
python:python3.6(需要安裝flask、psutil)
功能介紹:使用flask,實現(xiàn)可一鍵添加端口映射,可以刪除單端口,可刪除全部端口映射
需要準備的東西:
1:如上的內(nèi)網(wǎng)穿透工具:git clone https://gitee.com/stlswm/transponder.git
2:外網(wǎng)服務器 (需要安裝 Nginx),開放端口 9000-9999
3:域名,需要泛域名,基本上是添加一個@.domain.com(沒有的話可以使用ip+端口來訪問)
外網(wǎng)服務器:
把 outer_server 中的二進制linux可執(zhí)行文件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():
# 設(shè)置端口信息
if os.path.exists("./port.txt") == False:
pf=open("./port.txt",'w')
pf.write("9000")
pf.close
port=9000
else:
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)
#刪除對應的外網(wǎng)端口
@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=v
pid=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,返回true
return 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_str
if __name__ == '__main__':
app.run(host="0.0.0.0",port="8001")
內(nèi)網(wǎng):
對應git文件中的inner_server
請求:http://外網(wǎng)ip:8001/add
1:獲取到服務器端口和客戶端請求域名和秘鑰,
2:對應的替換到config里的內(nèi)容,配置好ProxyAddress的內(nèi)網(wǎng)端口,
4:windows雙擊打開inner_server中的main.exe linux: ./main
3:使用域名就能訪問到內(nèi)網(wǎng)
VIP客戶
- 諾德安達國際教育集團
- 寧波福爾達智能科技股份有限公司
- 上海全筑控股集團股份有限公司
- 上海長寧煙草集團長寧煙草糖酒有限公司
- 上海錦江之星旅館葉家宅店網(wǎng)絡、監(jiān)控系統(tǒng)維護
- 艾蒙斯特朗流體系統(tǒng)(上海)有限公司
- 莫泰酒店上海桃浦店監(jiān)控系統(tǒng)服務
- 締展國際貿(mào)易(上海)有限公司
- 康百世朝田液壓機電(中國)有限公司
咨詢電話:
400-880-7581
掃一掃,關(guān)注官方微信
實時掌握威麗最新動態(tài)
實時掌握威麗最新動態(tài)
Copyright 2005-2024 威麗科技(IT服務外包/系統(tǒng)集成), All Rights Reserved 備案/許可證號:
滬ICP備19005825號-1