最近想做用批处理做一个网络监控系统,监控本机网络连接情况和客户那边的各种网络服务是否正常,本打算用C++写,但是感觉成本有点高,后来决定用批处理分分钟搞定。
用的知识:1、bat编写;2、一定网络知识;3、著名的CURL
写的时候遇到一个小难题,就是怎样取得本机IP地址,这个问题似乎很弱智,有人说用ipconfig命令啊,但是我要的“当前提供Internet联网服务发网卡的IP地址和各项网络信息”这里包含至少两信息:1、在本机多网卡的情况下取得提供上网服务的网卡的网络信息,多余的网卡信息忽略;2、精确取得IP等信息作为参数传给后续程序使用,而非一坨包含IP的信息。
这里先奉上bat取的上述信息发方法,有时间再附上我写的网络监控小程序。
[code]
@echo off
setlocal ENABLEDELAYEDEXPANSION
:main
call currentNetSeting
cls
color 0a
echo *********************************************************
echo 网络诊断工具
echo 说明:本工具适用于有一定网络知识的人
echo by:frogchou
echo mail:frogchou@126.com
echo *********************************************************
echo.
echo 当前网络设置情况:
echo IP地址:%IP%
echo 掩码:%mask%
echo 网关:%getway%
echo DNS:%DNS%
pause
:currentNetSeting
for /f "tokens=2 delims=:" %%p in (‘netsh interface ip show config "wfcc" ^|find /i "ip"’) do (call stringUtil IP %%p)
for /f "tokens=2 delims=:" %%g in (‘netsh interface ip show config "wfcc" ^|find /i "默认网关"’) do (call stringUtil getway %%g)
for /f "tokens=2 delims=:" %%m in (‘netsh interface ip show config "wfcc" ^|find /i "子网前缀"’) do (call stringUtil mask %%m)
for /f "tokens=2 delims=:" %%d in (‘netsh interface ip show config "wfcc" ^|find /i "DNS"’) do (call stringUtil DNS %%d)
:stringUtil
:: 去掉首尾空格空格
:: var %1 变量
:: Str %2 要处理的字符串
set str=%2
:intercept_left
if "%str:~0,1%"==" " set "str=%str:~1%"&goto intercept_left
:intercept_right
if "%str:~-1%"==" " set "str=%str:~0,-1%"&goto intercept_right
set %1=%str%
[/code]
保存成XX.bat就可以了。