找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 69515|回复: 19

[其他] 如何实现间歇性地更换IP地址

[复制链接]
发表于 2010-6-23 18:08:41 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-5-25 14:51 编辑

求一个定时修改ip地址的批处理文件在线等啊急

只需要修改ip就可以了,2个ip来回修改每个2分钟修改一次(最好教一下怎么修改这个时间)


[ 本帖最后由 fanqie0223 于 2010-6-26 15:50 编辑 ]

评分

参与人数 1PB -20 收起 理由
Batcher -20 问题解决后请不要大肆修改提问帖 http://b ...

查看全部评分

 楼主| 发表于 2010-6-23 18:53:51 | 显示全部楼层
先检测ip0.0.0.0
如果是则换为0.0.0.1
检测ip为0.0.0.1则换为0
以后每2分钟换一次ip
都是只要换ip就ok子网,网关dns不变
 楼主| 发表于 2010-6-23 20:55:57 | 显示全部楼层
自己做了一个简单的现在问题是偶不会将中间的一段重复。公司做了监控如果没装客户端的话只能上网2分钟就要换一个ip在上谢谢
发表于 2010-6-23 21:08:04 | 显示全部楼层
楼主顶楼的竖排文字很难读

以下代码中 /mo 后面的数字 即为 时间间隔, 单位 分钟
ipa, ipb, mask, gateway 各变量请楼主根据自己的要求自行改动, 我在自己机器上已测试可正常运行.
  1. @echo off & setlocal enabledelayedexpansion
  2. set "taskName=IP_Switch"
  3. if not exist "%windir%\tasks\!taskName!.job" (
  4.    rem 确保 Task Scheduler 服务启动
  5.    sc config Schedule start= Auto>nul
  6.    (sc query Schedule | find "RUNNING">nul) || (
  7.    ((sc query Schedule | find "PAUSED">nul) && sc continue Schedule) || sc start Schedule
  8.    )
  9.    rem 建立计划任务运行本程序
  10.    schtasks /create /tn "!taskName!" /sc minute /mo 2 /tr %~s0 /ru system
  11. )
  12. rem 要运行的任务的实体
  13. set "ipa=192.168.1.101" & set "ipb=192.168.1.102" & set "mask=255.255.255.0" & set "gateway=192.168.1.1"
  14. for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  15.   for /f %%a in ('wmic nicconfig where "ipenabled='true'" get index') do (
  16.     if /i "%%a" neq "index" (
  17.       for /f "delims=}{" %%b in ('wmic nicconfig where "index=%%a" get ipaddress') do (
  18.         if "%%~b"=="%%i" for /f "skip=1" %%c in ('wmic nic where "index=%%a" get NetConnectionID') do (
  19.           if "%%~b"=="!ipa!" (netsh interface ip set address name="%%c" source=static addr=!ipb! mask=!mask! gateway=!gateway! 1
  20.           ) else (
  21.             netsh interface ip set address name="%%c" source=static addr=!ipa! mask=!mask! gateway=!gateway! 1
  22.           )
  23.         )
  24.       )
  25.     )
  26.   )
  27. )
复制代码
发表于 2010-6-23 21:14:56 | 显示全部楼层
http://baike.baidu.com/view/1225177.htm
Netsh 概述
我很好奇如果每两分钟需要换一个IP的话,上网该是怎样的痛苦

[ 本帖最后由 sgaizxt001 于 2010-6-23 21:17 编辑 ]
发表于 2010-6-23 23:24:03 | 显示全部楼层

回复 5楼 的帖子

另外一个应用场景是,ADSL用户用这个方法切换IP之后刷投票、刷流量。
 楼主| 发表于 2010-6-24 18:29:11 | 显示全部楼层
我的使用场景
公司花大价钱买了一个网管软件,客户机需要装客户端就被监控如果不装就只能上网9分半钟(今早才掐的时间)然后就会出现ip冲突不能上网现在我可以使用换ip的方法上网(不知道是不是网管有意留的漏洞竟然没有绑mac呵呵)

绝对新手看我的注册日期就知道自己糊写了一个



echo off
cls
echo 欢迎使用此程序运行后请将程序最小化能保证您正常上网15分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.2 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
echo off
cls
echo 欢迎使用此程序运行后请将程序最小化能保证您正常上网15分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.3 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
echo off
cls
echo 欢迎使用此程序运行后请将程序最小化能保证您正常上网15分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.4 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
ping -n 120 127.0.0.1>nul
echo off
cls
echo 还有13分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.5 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
ping -n 120 127.0.0.1>nul
echo off
cls
echo 还有11分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.2 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
ping -n 0 127.0.0.1>nul
echo OK...请按任意按键退出!
pause
exit
 楼主| 发表于 2010-6-24 18:37:22 | 显示全部楼层
上面是昨晚写的,今天去公司一早花20分钟又优化了一下哈哈
然后领导面前演示了一下竟然不成功,原因是上一次运行后我就关闭了导致使用了一个a地址无法被替换
思路先用一个a地址迅速换b10分钟后换c然后就是b换不换a,很傻的脚本不过自己第一次写这个玩意很开心
 楼主| 发表于 2010-6-24 18:40:27 | 显示全部楼层
回5楼偶只是上公司内网,公司内网很大的(全国的)今天竟然发现换ip的时候竟然pingdns竟然不丢包的
 楼主| 发表于 2010-6-24 19:01:18 | 显示全部楼层
4楼帮忙写的只能更换一次ip只能在开始的时候换一次ip之后就每2分钟换不了啊
发表于 2010-6-24 20:13:22 | 显示全部楼层

回复 10 楼的帖子

4 楼是利用的计划任务, 不够完善, 下面给出直接批处理循环, 但批处理程序不能关闭
  1. @echo off & setlocal enabledelayedexpansion
  2. call :foundACName ACName
  3. set "ipa=192.168.1.101" & set "ipb=192.168.1.102" & set "mask=255.255.255.0" & set "gateway=192.168.1.1"
  4. set /a mm=1!time:~3,2!-100, ms=2 & rem ms 为时间间隔
  5. for /l %%k in (0 0 0) do (
  6.   set /a "diff=1!time:~3,2!-100+60-mm, diff%%=60"
  7.   if !diff! geq !ms! ( set /a mm=1!time:~3,2!-100
  8.     for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  9.       if "%%i"=="!ipa!" (netsh interface ip set address name="!ACName!" source=static addr=!ipb! mask=!mask! gateway=!gateway! 1
  10.       ) else (
  11.         netsh interface ip set address name="!ACName!" source=static addr=!ipa! mask=!mask! gateway=!gateway! 1
  12.       )
  13.       for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %computername% ^| find "["') do echo %%a
  14.     )
  15.   )
  16. )
  17. exit /b

  18. :foundACName ACName rem 找出当前活动连接的名称
  19. for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  20.   for /f "skip=1" %%a in ('wmic nicconfig where "ipenabled='true'" get index') do (
  21.     for /f "delims=}{" %%b in ('wmic nicconfig where "index=%%a" get ipaddress') do (
  22.       if "%%~b"=="%%i" for /f "tokens=1-2 delims==" %%c in ('wmic nic where "index=%%a" get NetConnectionID /value') do (
  23.         for /f "delims=" %%z in ("%%d") do set "_%%c=%%z"
  24.       )
  25.     )
  26.   )
  27. )
  28. set %1=!_NetConnectionID!&echo 当前活动连接为: "!%1!"
  29. exit /b
复制代码
另给出一个实时监控显示 IP 的代码:
  1. @echo off & setlocal enabledelayedexpansion& set "color=02"& color !color!&mode con lines=1 cols=28
  2. for /l %%i in (0 0 0) do for /f "tokens=2 delims=[]" %%a in ('ping -a -n 1 %computername% ^| find "["') do (
  3.   if "%%a" neq "!ip!" set ip=%%a&set color=!color:~1!!color:~0,-1!&color !color!
  4. &#160;&#160;cls&set /p=!time! %%a<nul
  5. )
复制代码

[ 本帖最后由 neorobin 于 2010-6-24 21:54 编辑 ]
 楼主| 发表于 2010-6-24 21:59:31 | 显示全部楼层
谢谢楼上的只是现在偶还有一个问题是运行后不能马上更改ip能不能在帮忙修改一下谢谢
发表于 2010-6-24 22:07:12 | 显示全部楼层

回 12 楼的帖子

取消 变量 mm 的第一次赋值即可,即 把这行
  1. set /a mm=1!time:~3,2!-100, ms=2 & rem ms 为时间间隔
复制代码
改为
  1. set /a ms=2 & rem ms 为时间间隔
复制代码
另外 11 楼的代码重新编辑过的, 发 11 楼帖时的代码是不支持 连接名称中含有 空格的, 现在修改过的可兼容含 空格 的连接名称, 请重新复制代码

[ 本帖最后由 neorobin 于 2010-6-24 22:10 编辑 ]
 楼主| 发表于 2010-6-24 22:14:28 | 显示全部楼层
新手新方法
echo off
cls
echo 欢迎使用此程序运行后请将程序最小化能保证您正常上网15分钟
echo off
netsh interface ip set address name="本地连接" source=static addr=192.168.0.2 mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=192.168.0.1 gwmetric=0
netsh interface ip set dns name="本地连接" source=static addr=218.2.135.1
netsh interface ip add dns name="本地连接" addr=202.102.4.141
我把这个放在最前头。。。。。。
搞定
 楼主| 发表于 2010-6-24 22:29:33 | 显示全部楼层
如何在用户点击关闭批处理文件跳出对话框警告
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 02:33 , Processed in 0.024559 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表