日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测

發(fā)布時(shí)間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? 公司wifi很不穩(wěn)定,編寫了個(gè)wifi斷網(wǎng)后自動(dòng)重連的批處理,主要包括:可用wifi查詢、聯(lián)網(wǎng)、wifi切換感知、自動(dòng)檢測及掉線重連,網(wǎng)絡(luò)狀態(tài)分析等功能。

??? 本次分享第四部分:連接wifi,并對wifi網(wǎng)絡(luò)的可用性進(jìn)行檢測

上篇bat批處理開發(fā)-wifi聯(lián)網(wǎng)系列(3):查詢當(dāng)前連接的wifi SSID和密碼,封裝為bat函數(shù)(如何傳遞入?yún)⒑头祷爻鰠?#xff09;講到如何查詢當(dāng)前連接的wifi及其密碼,并介紹了如何將查詢功能封裝為函數(shù),入?yún)⒑统鰠⑷绾蝹鬟f等知識。

? 本篇主要講解根據(jù)ssid連接wifi,連接后,檢測wifi的可用性,涉及的知識點(diǎn)包括:

  • ? 斷開一個(gè)wifi連接
  • ? 根據(jù)ssid連接wifi
  • ? 獲取本機(jī)的ip,網(wǎng)關(guān)及dns
  • ? 通過ping檢測wifi網(wǎng)絡(luò)的連通性

下面一一介紹。

1. 斷開一個(gè)wifi連接

當(dāng)前連接的wifi不是你想連接的wifi時(shí),需要先斷開wifi連接。命令如下:

netsh wlan disconnect

bat代碼為:

@netsh wlan disconnect>nul

? 其中:

? @符號:表示屏蔽本行命令語句的回顯。即netsh wlan disconnect命令不是顯示在屏幕上

?? >符號:表示重定向,即命令語句執(zhí)行結(jié)果的輸出到哪里,由>指定,默認(rèn)為屏幕。如果是文件名,則表示輸出到文件。

??? nul符號:表示空指向,也即屏蔽輸出。

???? >nul:等于1>nul,是簡寫。表示屏蔽命令執(zhí)行的成功結(jié)果。如果要屏蔽失敗結(jié)果則寫成:2>nul。如果成功結(jié)果和失敗結(jié)果都不想輸出,那么則用 1>nul 2>nul 即可。

2.根據(jù)ssid連接wifi

要重新連接wifi,用到的命令為:netsh wlan connect ssid=ssidName name=ssidName

bat代碼為:

@netsh wlan connect ssid=%ssidName% name=%ssidName%>nul

以上兩個(gè)命令即可封裝為 wifi連接的代碼,bat代碼如下:

rem 重連WIFI :reConnectWifi set ssidName=%1set ssidKey=%2@netsh wlan disconnect>nul@netsh wlan connect ssid=%ssidName% name=%ssidName%>nul call:echoConnectInfo "[連接] wifi已重新連接 %ssidName%" goto:eof

3. 獲取本機(jī)的ip,網(wǎng)關(guān)及dns

獲取本機(jī)ip,網(wǎng)關(guān)和dns需要用到ipconfig/all命令+find命令組合,過濾出來想要的結(jié)果。廢話不多說,為了方便調(diào)用,獲取本機(jī)ip網(wǎng)關(guān)及dns的功能直接封裝成函數(shù),bat代碼如下:

:getDeviceInforem 獲取電腦本機(jī)IP,網(wǎng)關(guān),dnsfor /f "tokens=16" %%i in ('ipconfig /all ^| find /i "主機(jī)名"') do set hostName=%%i for /f "tokens=16" %%i in ('ipconfig ^|find /i "ipv4"') do set ip=%%ifor /f "tokens=15" %%i in ('ipconfig /all ^| find /i "默認(rèn)網(wǎng)關(guān)" ^| find /i "192"') do set gateway=%%irem for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^|findstr /i "DNS"') do set dns=%%ifor /f "tokens=16" %%i in ('ipconfig /all ^| find /i "DNS"') do set dns=%%i for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (if defined s set s=%%a.%%b.%%c &goto:hanye)&if /i "%%a%%b"=="DNSServers" set dns2=noif "%hostName%"=="" (set hostName=空) else (call:trim %hostName% hostName)if "%ip%"=="" (set ip=空) else (call:trim %ip% ip)if "%gateway%"=="" (set gateway=空) else (call:trim %gateway% gateway)if "%dns%"=="" (set dns=無) else (call:trim %dns% dns)if "%dns2%"=="" (set dns2=無) else (call:trim %dns2% dns2)echo [信息] 機(jī)器名=%hostName%, 本機(jī)ip=%ip%, 網(wǎng)關(guān)=%gateway%, dns1=%dns%, dns2=%dns2% goto:eof

? 很多機(jī)器的dns是自動(dòng)獲取的,因此dns1和dns2將是空值。

? 通過調(diào)用本程序的trim函數(shù),將字符串左右兩邊的空格全部刪掉,這樣獲取的值可以本其它函數(shù)調(diào)用直接使用。

??? 一般在連接wifi后獲取本機(jī)ip網(wǎng)關(guān)及dns。

? 4.通過ping檢測wifi網(wǎng)絡(luò)的連通性

? wifi已經(jīng)連接,本地ip、網(wǎng)關(guān)和dns(如果有的話)也有獲取,那么連接的wifi使用可用呢?

?? wifi可用性的檢測主要通過ping分別檢測 本機(jī)、網(wǎng)關(guān)、外網(wǎng)IP和外網(wǎng)域名分別進(jìn)行測試,如果都通過說明wifi可用。

??? 本文對ping進(jìn)行封裝,4個(gè)入?yún)?#xff0c;格式如下:

??? :ping [ 請求次數(shù)]? [ip|url] ? [檢測項(xiàng)名稱]? [檢測項(xiàng)代碼]?

??? wifi的可用性,主要通過檢測tcp/ip協(xié)議,網(wǎng)關(guān)、外網(wǎng)ip和外網(wǎng)域名的聯(lián)通性進(jìn)行判斷。如有其中一項(xiàng)不同,則認(rèn)為wifi不可用。

調(diào)用代碼如下:

?rem TCP/IP協(xié)議檢測
call:ping 2 %IP_127% TCPIP協(xié)議 1
?
rem 網(wǎng)關(guān)檢測
call:ping 2 %gateway% 網(wǎng)關(guān) 2

rem 互聯(lián)網(wǎng)IP檢測
call:ping 2 %IP_INTERNET% 外網(wǎng) 3

rem 互聯(lián)網(wǎng)域名檢測
call:ping 2 %IP_URL% DNS 4???

ping函數(shù)代碼如下: ??

:pingif "%2"=="" (goto detectWifiFailure)ping -n %1 %2 | find "TTL=" >nul if %errorlevel%==0 (goto detectWifiSuccess) else (goto detectWifiFailure):detectWifiSuccesscall:echoDetectInfo "[檢測] √ (%4)%3正常 %2"set netAvailable=%4 goto endPing:detectWifiFailurecall:echoError "[檢測] × (%4)%3不通 %2"rem echo [檢測] × ^(%4^)%3不通 %2set /a netAvailable=-%4goto netError:endPing goto:eof

以上為關(guān)鍵知識點(diǎn),現(xiàn)將連接wifi、獲取本機(jī)信息和wifi檢測的完整代碼呈現(xiàn)如下:

call:getDeviceInfoecho [信息] 當(dāng)前wifi=%ssid% echo=rem TCP/IP協(xié)議檢測 call:ping 2 %IP_127% TCPIP協(xié)議 1rem 網(wǎng)關(guān)檢測 call:ping 2 %gateway% 網(wǎng)關(guān) 2rem 互聯(lián)網(wǎng)IP檢測 call:ping 2 %IP_INTERNET% 外網(wǎng) 3rem 互聯(lián)網(wǎng)域名檢測 call:ping 2 %IP_URL% DNS 4:netErrorrem 刪除緩存文件 ping 沒有產(chǎn)生臨時(shí)文件 rem if exist %temp%\*.ping del %temp%\*.pingset /a detectTotalCount+=1if %netAvailable% leq 0 (rem color %errorColor%set lastWifiReconnectDate=%date:~0,10%set lastWifiReconnectTime=%time% set /a detectErrorCount+=1echo=call:echoError "[結(jié)果] × 網(wǎng)絡(luò)狀態(tài) %netAvailable%"call:echoConnectInfo "[連接] wifi重連中…"call:reConnectWifi %ssid% %wifiKey% set waittime=%ERROR_WAITTIME% ) else (rem color %normalColor%echo=echo [結(jié)果] √ 網(wǎng)絡(luò)狀態(tài) %netAvailable%set waittime=%NORMAL_WAITTIME% )call:analyseWifi set lastDetectDate=%date:~0,10% set lastDetectTime=%time% echo= echo [提示] ※ 若要重新選擇wifi檢測,請按下Ctrl + C鍵,選擇N,然后選擇Y即可 echo= call:echoStartEndInfo 結(jié)束 echo= rem 函數(shù)定義 rem ping :pingif "%2"=="" (goto detectWifiFailure)ping -n %1 %2 | find "TTL=" >nul if %errorlevel%==0 (goto detectWifiSuccess) else (goto detectWifiFailure):detectWifiSuccesscall:echoDetectInfo "[檢測] √ (%4)%3正常 %2"set netAvailable=%4 goto endPing:detectWifiFailurecall:echoError "[檢測] × (%4)%3不通 %2"rem echo [檢測] × ^(%4^)%3不通 %2set /a netAvailable=-%4goto netError:endPing goto:eofrem 重連WIFI :reConnectWifi set ssidName=%1set ssidKey=%2@netsh wlan disconnect>nul@netsh wlan connect ssid=%ssidName% name=%ssidName%>nul call:echoConnectInfo "[連接] wifi已重新連接 %ssidName%" goto:eof:getDeviceInforem 獲取電腦本機(jī)IP,網(wǎng)關(guān),dnsfor /f "tokens=16" %%i in ('ipconfig /all ^| find /i "主機(jī)名"') do set hostName=%%i for /f "tokens=16" %%i in ('ipconfig ^|find /i "ipv4"') do set ip=%%ifor /f "tokens=15" %%i in ('ipconfig /all ^| find /i "默認(rèn)網(wǎng)關(guān)" ^| find /i "192"') do set gateway=%%irem for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^|findstr /i "DNS"') do set dns=%%ifor /f "tokens=16" %%i in ('ipconfig /all ^| find /i "DNS"') do set dns=%%i for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (if defined s set s=%%a.%%b.%%c &goto:hanye)&if /i "%%a%%b"=="DNSServers" set dns2=noif "%hostName%"=="" (set hostName=空) else (call:trim %hostName% hostName)if "%ip%"=="" (set ip=空) else (call:trim %ip% ip)if "%gateway%"=="" (set gateway=空) else (call:trim %gateway% gateway)if "%dns%"=="" (set dns=無) else (call:trim %dns% dns)if "%dns2%"=="" (set dns2=無) else (call:trim %dns2% dns2)echo [信息] 機(jī)器名=%hostName%, 本機(jī)ip=%ip%, 網(wǎng)關(guān)=%gateway%, dns1=%dns%, dns2=%dns2% goto:eof

運(yùn)行截圖如下:

?系列文章:

?bat批處理開發(fā)系列(1):獲取已連的wifi及其密碼

bat批處理開發(fā)-wifi聯(lián)網(wǎng)系列(2):從wifi列表選擇一個(gè)wifi

bat批處理開發(fā)-wifi聯(lián)網(wǎng)系列(3):查詢當(dāng)前連接的wifi SSID和密碼,封裝為bat函數(shù)(如何傳遞入?yún)⒑头祷爻鰠?#xff09;

總結(jié)

以上是生活随笔為你收集整理的bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。