Board logo

标题: [其他] 如何实现间歇性地更换IP地址 [打印本页]

作者: fanqie0223    时间: 2010-6-23 18:08     标题: 如何实现间歇性地更换IP地址

本帖最后由 pcl_test 于 2017-5-25 14:51 编辑

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

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


[ 本帖最后由 fanqie0223 于 2010-6-26 15:50 编辑 ]
作者: fanqie0223    时间: 2010-6-23 18:53

先检测ip0.0.0.0
如果是则换为0.0.0.1
检测ip为0.0.0.1则换为0
以后每2分钟换一次ip
都是只要换ip就ok子网,网关dns不变
作者: fanqie0223    时间: 2010-6-23 20:55

自己做了一个简单的现在问题是偶不会将中间的一段重复。公司做了监控如果没装客户端的话只能上网2分钟就要换一个ip在上谢谢
作者: neorobin    时间: 2010-6-23 21:08

楼主顶楼的竖排文字很难读

以下代码中 /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. )
复制代码

作者: sgaizxt001    时间: 2010-6-23 21:14

http://baike.baidu.com/view/1225177.htm
Netsh 概述
我很好奇如果每两分钟需要换一个IP的话,上网该是怎样的痛苦

[ 本帖最后由 sgaizxt001 于 2010-6-23 21:17 编辑 ]
作者: Batcher    时间: 2010-6-23 23:24     标题: 回复 5楼 的帖子

另外一个应用场景是,ADSL用户用这个方法切换IP之后刷投票、刷流量。
作者: fanqie0223    时间: 2010-6-24 18:29

我的使用场景
公司花大价钱买了一个网管软件,客户机需要装客户端就被监控如果不装就只能上网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
作者: fanqie0223    时间: 2010-6-24 18:37

上面是昨晚写的,今天去公司一早花20分钟又优化了一下哈哈
然后领导面前演示了一下竟然不成功,原因是上一次运行后我就关闭了导致使用了一个a地址无法被替换
思路先用一个a地址迅速换b10分钟后换c然后就是b换不换a,很傻的脚本不过自己第一次写这个玩意很开心
作者: fanqie0223    时间: 2010-6-24 18:40

回5楼偶只是上公司内网,公司内网很大的(全国的)今天竟然发现换ip的时候竟然pingdns竟然不丢包的
作者: fanqie0223    时间: 2010-6-24 19:01

4楼帮忙写的只能更换一次ip只能在开始的时候换一次ip之后就每2分钟换不了啊
作者: neorobin    时间: 2010-6-24 20:13     标题: 回复 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.   cls&set /p=!time! %%a<nul
  5. )
复制代码

[ 本帖最后由 neorobin 于 2010-6-24 21:54 编辑 ]
作者: fanqie0223    时间: 2010-6-24 21:59

谢谢楼上的只是现在偶还有一个问题是运行后不能马上更改ip能不能在帮忙修改一下谢谢
作者: neorobin    时间: 2010-6-24 22:07     标题: 回 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 编辑 ]
作者: fanqie0223    时间: 2010-6-24 22:14

新手新方法
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
我把这个放在最前头。。。。。。
搞定
作者: fanqie0223    时间: 2010-6-24 22:29

如何在用户点击关闭批处理文件跳出对话框警告
作者: neorobin    时间: 2010-6-24 22:47     标题: 回复 15楼 的帖子

这个我不会, 但有一种隐藏运行的技术
  1. @echo off & setlocal enabledelayedexpansion
  2. if /i "%1" equ "hide" goto begin
  3. if /i "%1" equ "show" goto begin
  4. set /p show=需要显示窗口界面吗^(y/n^)[直接回车=不显示]:)
  5. if /i "%show:~0,1%" equ "y" goto begin
  6. (call :showWindow hide)
  7. :begin
  8. call :foundACName ACName
  9. set "ipa=192.168.1.101" & set "ipb=192.168.1.102" & set "mask=255.255.255.0" & set "gateway=192.168.1.1"
  10. set /a ms=2 & rem ms 为时间间隔
  11. for /l %%k in (0 0 0) do (
  12.   set /a "diff=1!time:~3,2!-100+60-mm, diff%%=60"
  13.   if !diff! geq !ms! ( set /a mm=1!time:~3,2!-100
  14.     for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  15.       if "%%i"=="!ipa!" (netsh interface ip set address name="!ACName!" source=static addr=!ipb! mask=!mask! gateway=!gateway! 1
  16.       ) else (
  17.         netsh interface ip set address name="!ACName!" source=static addr=!ipa! mask=!mask! gateway=!gateway! 1
  18.       )
  19.       for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %computername% ^| find "["') do echo %%a
  20.     )
  21.   )
  22. )
  23. exit /b
  24. :foundACName ACName rem 找出当前活动连接的名称
  25. for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  26.   for /f "skip=1" %%a in ('wmic nicconfig where "ipenabled='true'" get index') do (
  27.     for /f "delims=}{" %%b in ('wmic nicconfig where "index=%%a" get ipaddress') do (
  28.       if "%%~b"=="%%i" for /f "tokens=1-2 delims==" %%c in ('wmic nic where "index=%%a" get NetConnectionID /value') do (
  29.         for /f "delims=" %%z in ("%%d") do set "_%%c=%%z"
  30.       )
  31.     )
  32.   )
  33. )
  34. set %1=!_NetConnectionID!&echo 当前活动连接为: "!%1!"
  35. exit /b
  36. :showWindow
  37. if /i "%1" equ "hide" (set intWindowStyle=0) else (set intWindowStyle=5)
  38. mshta vbscript:createobject("wscript.shell").run("%~snx0 %1",!intWindowStyle!)(window.close)&&exit
  39. exit /b
复制代码
要想关闭隐藏的 cmd , 可以用一种野蛮的方式关闭所有的 cmd
  1. taskkill /f /t /im cmd.exe
复制代码

[ 本帖最后由 neorobin 于 2010-6-24 23:07 编辑 ]
作者: fanqie0223    时间: 2010-6-25 06:41

实在太感谢楼上的师傅了在请教一下如何不询问直接隐藏cmd?谢谢
这样我直接随系统启动就ok了对用户绝对透明了
作者: fanqie0223    时间: 2010-6-25 06:44

找出当前活动连接的名称
这段也不要我直接直接写上去就ok谢谢
作者: fanqie0223    时间: 2010-6-25 07:51

师傅写的cpu占用100%啊我胡写的那个占用就不高不知道为什么,能不能把占用降下来
作者: neorobin    时间: 2010-6-25 16:50

  1. @echo off & setlocal enabledelayedexpansion
  2. if /i "%1" equ "hide" goto begin
  3. if /i "%1" equ "show" goto begin
  4. rem 直接隐藏运行的方法: 删除或注解下面的一行
  5. set /p show=需要显示窗口界面吗^(y/n^)[直接回车=不显示]:
  6. if /i "%show:~0,1%" equ "y" goto begin
  7. (call :showWindow hide)
  8. :begin
  9. set "ACName=本地连接"
  10. (call :findACName ACName) & rem 不用搜索活动连接的话, 删除或注解本行.
  11. set /a ipts=2,ipte=9,ipt=3& rem ipts--ipte 指定可用的 ip 地址范围, 例如: 192.168.0.2--192.168.0.9, ipt 取范围中的任一值.
  12. set "iph=192.168.0." & set "mask=255.255.255.0" & set "gateway=!iph!1" & set ms=120 & rem ms: 时间间隔秒数
  13. netsh interface ip set address "!ACName!" static !iph!!ipt! !mask! !gateway! 1
  14. for /l %%k in (0 0 0) do (
  15.   set /a "ipt=(ipt+1-ipts)%%(ipte-ipts+1)+ipts"
  16.   netsh interface ip set address "!ACName!" static !iph!!ipt! !mask!
  17.   for /f "tokens=2 delims=[]" %%a in ('ping -n 1 %computername% ^| find "["') do echo %%a
  18.   ping -n !ms! 127.1>nul
  19. )
  20. exit /b
  21. :findACName ACName rem 找出当前活动连接的名称
  22. for /f "tokens=2 delims=[]" %%i in ('ping -n 1 %computername% ^| find "["') do (
  23.   for /f "skip=1" %%a in ('wmic nicconfig where "ipenabled='true'" get index') do (
  24.     for /f "delims=}{" %%b in ('wmic nicconfig where "index=%%a" get ipaddress') do (
  25.       if "%%~b"=="%%i" for /f "tokens=1-2 delims==" %%c in ('wmic nic where "index=%%a" get NetConnectionID /value') do (
  26.         for /f "delims=" %%z in ("%%d") do set "_%%c=%%z"
  27.       )
  28.     )
  29.   )
  30. )
  31. set %1=!_NetConnectionID!&echo 当前活动连接为: "!%1!"
  32. exit /b
  33. :showWindow
  34. if /i "%1" equ "hide" (set intWindowStyle=0) else (set intWindowStyle=5)
  35. mshta vbscript:createobject("wscript.shell").run("%~snx0 %1",!intWindowStyle!)(window.close)&&exit
  36. exit /b
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2