返回列表 发帖

[网络连接] 批处理如何判断IP是否在IP段?

前天搞了个自启脚本方便自己工作用,结果被别人挖走了
然后脑子一想有两种方法,
一种是自启下载iplist.txt下来,判断本机IP在不在这个txt里有,有则运行下面的语句
但是这种方法要下载ip.txt...
然后第二种就是判断本机IP是否在192.168.0.25-192.168.78或者192.168.3.52-192.3.90或者192.168.5.20-192.168.55,在则运行下面的语句,不在不运行
第二种方法好是好,但是一想懵了,我对for操作不熟,无从下手
求dalao们支招

??为啥表情符号不显示

TOP

@echo off
REM verify if any ipv4 address falls in a special subnet
setlocal EnableDelayedExpansion
set "subnet1=192.168.0.25-192.168.0.78"
set "subnet2=192.168.3.52-192.168.3.90"
set "subnet3=192.168.5.20-192.168.5.55"
for /f "tokens=3" %%A in ('netsh interface ipv4 show addresses^|find /i "IP"^|find /v "127.0.0.1"') do (
  set IPv4=%%A
  call :IPv4ToInt32 "%%A" "IPv4my"
  for /f "tokens=1-3 delims==-" %%B in ('set subnet') do (
    call :IPv4ToInt32 "%%C" "IPv4lo"
    call :IPv4ToInt32 "%%D" "IPv4hi"
    if !IPv4my! geq !IPv4lo! if !IPv4my! leq !IPv4hi! (
      set fallsubnet=%%B
      goto subnetproc
    )
  )
)
goto end
:subnetproc
echo.Your IPv4 address "%IPv4%" is in "%fallsubnet%=!%fallsubnet%!"
REM more tasks
goto end
:end
endlocal
pause
exit /b
:IPv4ToInt32 IPv4 outvar
set Int32=0
for /f "tokens=1-4 delims=." %%A in ("%~1") do (
  set /a "Int32=((%%A*256+%%B)*256+%%C)*256+%%D"
)
if not "%~2"=="" set %~2=%Int32%
exit /bCOPY
微信:flashercs
QQ:49908356

TOP

回复 1# kav0123


    你IP地址段是不是打错了?
    应该是 192.168.0.25-192.168.0.78  ,  192.168.3.52-192.168.3.90  ,  92.168.5.20-192.168.5.55
@echo off
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do set ip=%%a
for /F "tokens=3,4 delims=." %%i in ("%ip%") do (
    if %%i EQU 0 if %%j GEQ 25 if %%j LEQ 78 set "self=true"
    if %%i EQU 3 if %%j GEQ 52 if %%j LEQ 90 set "self=true"
    if %%i EQU 5 if %%j GEQ 20 if %%j LEQ 55 set "self=true"
)
if not "%self%"=="true" exit /BCOPY

TOP

回复 4# wujunkai


    hh,还真写错了,谢谢dalao

TOP

回复 3# flashercs


  dalao,请问这  IPv4ToInt32和subnetproc分别是啥?有点疑惑

TOP

subnetproc是IP在指定网段内你要做什么事情.
微信:flashercs
QQ:49908356

TOP

回复 7# flashercs


    就是符合IP段内的内容放这个subnetproc里吗,dalao

TOP

回复 8# kav0123

搞定了吗?楼主。

TOP

返回列表