前言
端口轉發,這個功能在平時的開發中用到的還是比較多的,記錄下 Windows 如何使用自帶的軟件實現端口轉發。
命令介紹
Windows 從 Windows 2000 開始就提供了最基本的端口轉發功能,是基於 Windows 的 IP Helper
服務的,不僅可以提供端口轉發功能,還可以通過將 IPv4 和 IPv6 的不同地址的數據進行轉發,但是只可以轉發 TCP 協議,暫不支持 UDP 協議,使用 netsh interface portproxy
命令即可開啟。
先看下命令幫助:
PS C:\Windows\system32> netsh interface portproxy
下列指令有效:
此上下文中的命令:
? - 顯示命令列表。
add - 在一個表格中添加一個配置項。
delete - 從一個表格中刪除一個配置項。
dump - 顯示一個配置腳本。
help - 顯示命令列表。
reset - 重置端口代理配置狀態。
set - 設置配置信息。
show - 顯示信息。
一個一個介紹,先說 show 命令:
show命令
show 命令可以查看已經存在的端口轉發規則。用法如下:
show all - 顯示所有端口代理參數。
show v4tov4 - 顯示 IPv4 代理連接到另一個 IPv4 端口的參數。
show v4tov6 - 顯示 IPv4 代理連接到 IPv6 的參數。
show v6tov4 - 顯示 IPv6 代理連接到 IPv4 的參數。
show v6tov6 - 顯示 IPv6 代理連接到另一個 IPv6 端口的參數。
例如我想查看所有的端口轉發規則,則可以使用 netsh interface portproxy show all
。
PS C:\Windows\system32> netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
127.0.0.1 3389 25.63.54.89 3389
help命令
這個就不說了,打印幫助信息...
add命令
add 命令可以增加一條端口轉發規則,具體用法為:
add v4tov4 - 添加通過 IPv4 的 IPv4 和代理連接到的偵聽項目。
add v4tov6 - 添加通過 IPv6 的 IPv4 和代理連接到的偵聽項目。
add v6tov4 - 添加通過 IPv4 的 IPv6 和代理連接到的偵聽項目。
add v6tov6 - 添加通過 IPv6 的 IPv6 和代理連接到的偵聽項目。
用法: add v4tov4 [listenport=]<integer>|<servicename>
[connectaddress=]<IPv4 address>|<hostname>
[[connectport=]<integer>|<servicename>]
[[listenaddress=]<IPv4 address>|<hostname>]
[[protocol=]tcp]
參數:
標記 值
listenport - IPv4 偵聽端口。
connectaddress - IPv4 連接地址。
connectport - IPv4 連接端口。
listenaddress - IPv4 偵聽地址。
protocol - 使用的協議。現在只支持 TCP。
例如我想將本地的 3389 端口轉發到遠程的 3389 端口上,可以使用以下命令實現:
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=3389 connectaddress=25.63.54.89 connectport=3389
其中 v4tov4 的作用在於將 IPv4 地址的 3389 端口轉發到 IPv4 地址的 3389端口上,listenaddress 指定本地監聽的地址,listenport 指定本地監聽的端口,connectaddress 指定要將數據轉發到哪個地址去,也就是目的地址,connectport 指定要轉發到的端口,也就是目的端口。
delete命令
delete 命令用來刪除一條端口轉發規則,刪除時只需要指定端口轉發的監聽地址和端口即可,具體用法為:
delete v4tov4 - 刪除通過 IPv4 的 IPv4 和代理連接到的偵聽項目。
delete v4tov6 - 刪除通過 IPv6 的 IPv4 和代理連接到的偵聽項目。
delete v6tov4 - 刪除通過 IPv4 的 IPv6 和代理連接到的偵聽項目。
delete v6tov6 - 刪除通過 IPv6 的 IPv6 和代理連接到的偵聽項目。
用法: delete v4tov4 [listenport=]<integer>|<servicename>
[[listenaddress=]<IPv4 address>|<hostname>]
[[protocol=]tcp]
參數:
標記 值
listenport - 要偵聽的 IPv4 端口。
listenport - 要偵聽的 IPv4 地址。
protocol - 要使用的協議。當前僅支持 TCP。
例如我想刪除剛才添加的端口轉發規則,先查看下目前存在的端口轉發規則:
PS C:\Windows\system32> netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
127.0.0.1 3389 25.63.54.89 3389
執行刪除命令 PS C:\Windows\system32> netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=3389
即可。
PS C:\Windows\system32> netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=3389
PS C:\Windows\system32> netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
dump命令
dump 命令可以將已存在的端口轉發規則進行輸出,保存到一個文件中或者輸出到控制台的標准輸出中,方便發送給其他人或者進行備份,以備下次還原。
執行 netsh interface portproxy dump
將配置信息輸出到控制台的標准輸出,或者執行 netsh interface portproxy dump > 1.txt
命令將配置信息重定向到文件中。
PS D:\360download> netsh interface portproxy dump
#========================
# 端口代理配置
#========================
pushd interface portproxy
reset
add v4tov4 listenport=3389 connectaddress=25.63.54.89 connectport=3389
popd
# 端口代理配置結束
PS D:\360download> netsh interface portproxy dump >1.txt
set命令
set 命令可以修改現有的端口轉發配置,也可以新加端口轉發配置。
例如將剛才的遠程地址和端口改為 123.124.125.126:3390
,使用以下命令來修改。
PS C:\Windows\system32> netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
127.0.0.1 3389 25.63.54.89 3389
D:\360download>netsh interface portproxy set v4tov4 listenaddress=127.0.0.1 listenport=3389 connectaddress=123.124.125.126 connectport=3390
D:\360download>netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
127.0.0.1 3389 123.124.125.126 3390
本來以為可以將剛才 dump 命令導出的配置重新導入的,但是我沒成功....可能人家就沒設計這個功能吧, 有點尷尬的...如果有知道的小伙伴可以告訴我。
reset命令
reset 命令可以重置所有的端口轉發規則,如果沒有備份的小伙伴慎用。
D:\360download>netsh interface portproxy show all
偵聽 ipv4: 連接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
127.0.0.1 3389 123.124.125.126 3390
D:\360download>netsh interface portproxy reset
D:\360download>netsh interface portproxy show all
D:\360download>
注意事項
如果有添加了規則但是規則不生效的小伙伴,可以檢查下 Windows 的 IP Helper
服務是否開啟,因為端口轉發功能是由這個服務支持的,一定要保證它是正常運行的才可以。還有,在監聽本地地址上的端口時,最好先確定本地的端口沒有被占用,防止端口沖突影響其他程序的正常運行。
總結
以上就是端口轉發功能的使用教程,在平時的開發中臨時需要和虛擬機通信或者其他場景中還是比較常用的,雖然只支持 TCP 協議,不過 UDP 在平時使用的並不多,TCP 也足夠了,所以還是可以滿足日常開發需求的。