使用Python編寫Windows端口映射管理工具
起因
最近經(jīng)常需要用 netsh interface portproxy 來配置端口轉發(fā)。每次都要敲一長串命令,而且想查看現(xiàn)有的映射規(guī)則還得再敲一遍命令,刪除的時候又是一遍...
敲多了真的煩,于是花了點時間擼了個圖形化工具,現(xiàn)在分享出來。
先看效果
界面長這樣,簡單直觀:

主要功能:
- 一鍵添加端口映射
- 批量刪除(支持多選)
- 按 IP 和端口篩選
- 自動配置防火墻規(guī)則
為什么要做這個
Windows 自帶的 netsh interface portproxy 功能挺強大,但是命令行操作實在太麻煩了。
比如添加一個映射:
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=192.168.1.100 connectport=80
查看所有映射:
netsh interface portproxy show all
刪除映射:
netsh interface portproxy delete v4tov4 listenport=8080
每次都要敲這么長,而且容易打錯。更麻煩的是,添加完映射還得手動配置防火墻規(guī)則,不然外部訪問不了。
所以就想著做個工具,把這些操作都可視化,點點鼠標就能搞定。
技術選型
用的是 Python + CustomTkinter,主要考慮:
- Python 寫起來快
- CustomTkinter 界面比原生 Tkinter 好看多了
- 可以打包成 exe,不用裝 Python 環(huán)境
核心就是調(diào)用系統(tǒng)命令,然后解析輸出結果展示在界面上。
實現(xiàn)細節(jié)
1. 自動提權
端口映射需要管理員權限,所以程序啟動時會自動請求提權:
def run_as_admin():
try:
if ctypes.windll.shell32.IsUserAnAdmin():
return True
except:
pass
try:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, f'"{sys.argv[0]}"', None, 1)
return True
except:
return False
if not ctypes.windll.shell32.IsUserAnAdmin():
run_as_admin()
sys.exit()
2. 命令執(zhí)行
封裝了一個執(zhí)行命令的函數(shù),處理了編碼問題(Windows 的編碼真是個坑):
def run_cmd(cmd):
result = subprocess.run(
cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
creationflags=subprocess.CREATE_NO_WINDOW
)
# 嘗試多種編碼解析輸出
try:
stdout = result.stdout.decode("utf-8", errors="ignore")
except:
try:
stdout = result.stdout.decode("gbk", errors="ignore")
except:
stdout = result.stdout.decode("latin-1", errors="ignore")
return (result.returncode, stdout, stderr)
3. 解析映射列表
netsh interface portproxy show all 的輸出格式比較固定,直接按空格分割就行:
code, out, err = run_cmd("netsh interface portproxy show all")
lines = out.splitlines()
for line in lines:
if "偵聽" in line or "ipv4" in line or "---" in line:
continue
parts = line.split()
if len(parts) >= 4:
listen_addr = parts[0]
listen_port = parts[1]
target_ip = parts[2]
target_port = parts[3]
# 存儲到列表
4. 自動配置防火墻
添加映射的時候,順便把防火墻規(guī)則也加上:
# 添加映射
cmd = f"netsh interface portproxy add v4tov4 listenport={listen_port} connectaddress={to_ip} connectport={to_port}"
run_cmd(cmd)
# 添加防火墻規(guī)則
firewall = f'netsh advfirewall firewall add rule name="Port{listen_port}" dir=in action=allow protocol=TCP localport={listen_port}'
run_cmd(firewall)
這樣就不用手動去防火墻里配置了。
使用場景
我自己主要用在這幾個地方:
1. 內(nèi)網(wǎng)服務轉發(fā)
公司內(nèi)網(wǎng)有個測試服務器,但是只能通過跳板機訪問。在跳板機上配置端口映射,就可以直接從本地訪問了:
本地 8080 → 內(nèi)網(wǎng)服務器 192.168.1.100:80
2. 多服務統(tǒng)一管理
本地開發(fā)的時候,經(jīng)常要同時跑好幾個服務,端口一多就容易亂。用這個工具統(tǒng)一管理,一目了然:
3000 → 前端服務
3001 → 后端 API
3002 → 數(shù)據(jù)庫管理界面
3. 臨時端口轉發(fā)
有時候需要臨時把某個端口的流量轉到另一臺機器,用這個工具幾秒鐘就能搞定,不用去改配置文件。
遇到的坑
坑1:界面字體看不清
一開始用的深色主題,結果發(fā)現(xiàn)某些情況下字體顏色和背景色對比度不夠,看不清。后來改成淺色主題,并且手動指定了文字顏色,才解決。
坑2:編碼問題
Windows 命令行輸出的編碼真是個大坑,有時候是 GBK,有時候是 UTF-8。最后用了多重 try-except 來處理,先試 UTF-8,不行再試 GBK,再不行就用 latin-1。
坑3:防火墻規(guī)則
一開始只添加了端口映射,沒加防火墻規(guī)則,結果外部訪問不了。后來才發(fā)現(xiàn)還得手動配置防火墻,于是在代碼里自動加上了。
打包成 exe
用 PyInstaller 打包很簡單:
pip install pyinstaller pyinstaller --onefile --windowed portMapping.py
--onefile 打包成單個 exe 文件,--windowed 不顯示命令行窗口。
打包完的 exe 大概 20MB 左右,可以直接分發(fā)給別人用,不需要裝 Python 環(huán)境。
后續(xù)計劃
目前功能還比較基礎,后面打算加上:
- 導入導出配置(方便備份和遷移)
- 支持 IPv6
- 添加日志記錄
- 支持端口范圍批量映射
總結
這個工具雖然簡單,但確實提高了不少效率。以前配置端口映射要敲好幾條命令,現(xiàn)在點幾下鼠標就搞定了。
如果你也經(jīng)常需要配置端口轉發(fā),不妨試試這個工具。有問題或建議歡迎留言交流!
最后說一句:工具是死的,人是活的。這個工具只是把命令行操作可視化了,底層還是調(diào)用的系統(tǒng)命令。如果你對 Windows 端口映射的原理感興趣,建議還是先了解一下 netsh interface portproxy 的用法,這樣遇到問題也知道怎么排查。
到此這篇關于使用Python編寫Windows端口映射管理工具的文章就介紹到這了,更多相關Python Windows端口映射管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python與Java接入AI模型的MCP協(xié)議的原理與實現(xiàn)
MCP(Model Context Protocol) 是一種專為遠程控制和管理 AI 大模型而設計的通信協(xié)議,本文小編就為大家大家介紹一下Python和Java 中接入AI大模型的MCP協(xié)議的具體方法吧2025-05-05
Python使用for循環(huán)遍歷字符串逐個獲取字符的完整指南
在Python編程的浩瀚宇宙中,字符串處理是最基礎也最強大的技能之一,當你需要分析文本、清洗數(shù)據(jù)或構建復雜應用時,逐個獲取字符串中的字符往往是第一步,今天,我們將深入探索這個看似簡單卻蘊含無限可能的主題,如何用for循環(huán)遍歷字符串,逐個獲取字符2026-04-04
python3操作微信itchat實現(xiàn)發(fā)送圖片
這篇文章主要為大家詳細介紹了python3操作微信itchat實現(xiàn)發(fā)送圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
python 隨機生成10位數(shù)密碼的實現(xiàn)代碼
這篇文章主要介紹了python 隨機生成10位數(shù)密碼的實現(xiàn)代碼,在文中給大家提到了生成隨機密碼要實現(xiàn)的功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06
Pyinstaller+Pipenv打包Python文件的實現(xiàn)示例
相信大家都試過將Python文件進行打包,本文主要介紹了Pyinstaller+Pipenv打包Python文件,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
使用Python實現(xiàn)向同一PDF添加附件與附件注釋
在文檔管理和報表生成中,將相關文件直接嵌入 PDF 可以大大提高信息整合度,讓收件人無需額外查找即可訪問所有資源,本文演示如何在 同一 PDF 文件中實現(xiàn) 直接添加附件和添加附件注釋,希望對大家有所幫助2025-11-11

