讓Socket穿透Windows防火牆

2022-05-27 21:09:13 字數 965 閱讀 9234

建立了serversocket以後,並不是沒事了,其實上,為了系統安全考慮,建立伺服器套接字後,只是建立成功了,但是在資料報入站的時候呢,會被防火牆過濾,因此,我們就收不到來自網路的資料了。

因此,在系統的預設安全級別下,當乙個程式第一次建立serversocket時,系統會彈出乙個這樣的對話方塊:

除非使用者同意,點「執行訪問」,否則就沒辦法通訊,而你的程式,收不到半點異常

因為防火牆不是阻止的伺服器套接字的建立,而是阻止來自網路的資料報入站!

但關鍵的問題是,這個對話方塊裡的東西寫的太那啥了,所以使用者根本看不懂,於是不知道怎麼辦,所以一般都是點右上角的「x」,就和點「取消」是乙個效果。

那麼,我們的程式是不是就要在萬惡的防火牆的魔爪下顫抖嗎?!

似乎是這樣,但其實,我們要反抗防火牆這種無理的行為!

首先,我們需要拿到管理員許可權,這個不難,具體可以看我的博文:

然後,我們執行netsh:(比如用shellexecute或者createprocess)

netsh advfirewall firewall delete rule name="程式名稱"netsh advfirewall firewall delete rule name="程式名稱.exe"netsh advfirewall firewall add rule name="程式名稱" dir=in action=allow program="程式路徑" enable=yes

注:只在vista以上系統中有效

解釋一下,刪除動作最好多做幾個,有你程式的檔名稱,版本資訊裡的名稱,最好都刪一次,因為如果已經彈過一次框的話,你不知道防火牆用的哪乙個名稱記錄的(有版本資訊的時候一般是版本資訊裡的名稱),如果不把之前的刪掉還是不行,要麼就在建立套接字之前或軟體安裝的時候用,這樣也行。

這就等效於使用者點選了「允許訪問」,就不會跳那個框了!相當於實現了穿透防火牆,但防火牆沒有關閉,同時使用者也不會發現。(誰會無聊到翻防火牆規則去)

然後,我們偷著樂呵去吧!哈哈

linux下socket和window下區別

socket相關程式從windows移植到linux下需要注意的 1 標頭檔案 windows下winsock.h winsock2.h linux下sys socket.h 錯誤處理 errno.h 2 初始化 windows下需要用wsastartup linux下不需要 3 關閉socket ...

window下socket實現TCP伺服器

伺服器 1.初始化 wsastartup 2.建立socket s socket 3.繫結埠 ret bind 4.監聽 ret listen 5.接收客戶端的連線請求 s new accept 三次握手發生在這個過程 6.收發資料 ret recv 阻塞模式,記憶體不夠存放傳送的資訊時,則阻塞se...

EchoSite 讓內網穿透變得簡單

來到echosite官網註冊的都可以獲得三個月免費的網域名稱,續費也就五塊乙個月。下面介紹下方法 1 首先你需要拿到你自己的網域名稱,在我的網域名稱裡就能看到了 手機號和密碼是你註冊時的手機號和密碼 1填你的網域名稱 如上圖我的是 lg 所以在下圖中填的 lg 2 http 視情況而定 我的是 12...