Board logo

标题: 批处理如何获得本机的IP和MAC地址然后进行绑定? [打印本页]

作者: wzswzsh     时间: 2006-8-7 13:32    标题: 批处理如何获得本机的IP和MAC地址然后进行绑定?

批处理如何获得本机的IP和MAC地址然后进行绑定?

我想做一个批处理
让机器在开机的时候自动获得IP和MAC
然后进行arp静态绑定
请教高手,要如何处理
作者: iaide007     时间: 2006-9-10 17:41
@echo off
:::::::::读取本机Mac地址
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt >phyaddr.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set ip=%%M
:::::::::读取本机ip地址
if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt >IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set mac=%%I
:::::::::绑定本机IP地址和MAC地址
arp -s %IP% %Mac%
del *.txt
exit
作者: namejm     时间: 2006-9-10 20:02
  来个不生成临时文件的更简洁的代码:
@echo off
for /f "tokens=1* delims=:" %%i in ('ipconfig /all^|find /i "Physical Address"') do set mac=%%j
for /f "tokens=1* delims=:" %%i in ('ipconfig /all^|find /i "IP Address"') do set ip=%%j
arp -s %ip:~1% %Mac:~1%

作者: iaide007     时间: 2006-9-10 22:35
哈哈
namejm 写的,都是绿色产品哦,
作者: vkill     时间: 2006-9-11 00:33
不生成临时文件的我怎么弄都不合适,再学学
作者: kennyfan     时间: 2006-9-18 22:11
终于搞明白namejm 写的好东西 的确有用!~
我这里经常有用户发送arp欺骗包.上不了网.烦都烦死!~
作者: 9527     时间: 2006-9-18 22:51
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('ipconfig/all^|findstr /i /c:"IP Address" /c:"Physical Address"^|sort') do set bb=!bb!%%b
arp -s%bb%

我只追求简单与完美.............
作者: pengfei     时间: 2006-9-19 01:47
我对网卡绑定不太了解, 不过楼上几位的代码都有问题...
ipconfig /all有两个ip和两个mac地址. 不知楼主绑定的ip是内网ip还是外网呢?
作者: pengfei     时间: 2006-9-19 02:40
@echo off
setlocal enabledelayedexpansion
set ipfilter=0
set macfilter=0
for /f "tokens=2* delims=:" %%a in ('ipconfig /all ^| find "IP Address"') do (
    for /f "tokens=2* delims=:" %%i in ('ipconfig /all ^| find "Physical Address"') do (
        set iptemp=%%a
        set mactemp=%%i
        if "!ipfilter!"=="0" set ip=!iptemp:~1!
        if "!macfilter!"=="0" set mac=!mactemp:~1!
        set /a ipfilter=!ipfilter!+1
        set /a macfilter=!macfilter!+1
    )
)
arp -s %ip% %mac%

可以指定绑定网卡为内网或外网.
这段代码为绑定内网IP
if "!ipfilter!"=="0" set ip=!iptemp:~1!
把上面一句改为
if "!ipfilter!"=="2" set ip=!iptemp:~1!
则绑定外网ip
作者: namejm     时间: 2006-9-19 06:01


  Quote:
Originally posted by pip at 2006-9-18 22:51:
for /f "tokens=1* delims=:" %%a in ('ipconfig/all^|findstr /i /c:"IP Address" /c:"Physical Address"^|sort') do set bb=!bb!%%b
arp -s%bb%

  呵呵,确实够简洁。

  c:"str" 连用实现了只用一个变量提取同一列中的两行内容,然后用sort来对结果排序,使得变量内容顺序符合arp的要求,确实巧妙。
作者: xg911335     时间: 2006-9-19 06:41
如果还要帮定其他IP呢?比如网关?
作者: kcdsw     时间: 2006-9-19 08:05
有了pip 和 namejm  我就不出来现了~!

对pip代码还有些恐惧!!  

研究一下!
作者: pengfei     时间: 2006-9-19 09:04
pip  namejm修改的代码好强, 正在学习中... 呵呵~
PIP的代码提取到的值为:  
192.168.0.1 58.46.5.202 00-14-2A-AC-FD-4E 00-53-45-00-00-00
不知是否符合arp 命令的用法.
楼主说, 还要绑定网关, 请说明一下, 需要绑定哪些IP, 以及哪个IP绑定哪个MAC地址.
作者: namejm     时间: 2006-9-19 11:48
  看来对于有内网IP和外网IP的机子来说,应该慎用以上代码。『第 9 楼』pengfei的代码更具有通用性。
作者: sea2moon     时间: 2006-9-29 05:10
我试的PIP的好象不行。。
另外问下:arp -s %ip:~1% %Mac:~1%
中的。。   ~1%   是怎么一回事?不太明白
作者: NaturalJ0     时间: 2006-9-29 05:15
呵呵,被 namejm 感染,现在也开始有“不生成临时文件”的偏好了。 ^_^
作者: wang6610     时间: 2006-9-29 11:54


  Quote:
Originally posted by iaide007 at 2006-9-10 05:41 PM:
@echo off
:::::::::读取本机Mac地址
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.t ...

气愤删了我的TXT文件!!!!!!!!!!
作者: namejm     时间: 2006-9-29 13:02


  Quote:
Originally posted by wang6610 at 2006-9-29 11:54:


气愤删了我的TXT文件!!!!!!!!!!

  哎呀,那个代码里有一句令人闻风丧胆的语句,还是屏蔽了吧:del *.txt。这个东西有点危险哦。对你的遭遇表示同情。

  以后还是对del和rd之类的语句小心为妙,建议各位在写类似语句的时候,尽量用echo语句来演示,让别人觉得满意了再修改不迟,尽量在显眼的地方加入警示语,以免别人测试的时候遭受不必要的损失。
作者: sea2moon     时间: 2006-9-30 02:11


  Quote:
Originally posted by pengfei at 2006-9-19 02:40:
@echo off
setlocal enabledelayedexpansion
set ipfilter=0
set macfilter=0
for /f "tokens=2* delims=:" %%a in ('ipconfig /all ^| find "IP Address"') do (
    for /f "tok ...

pengfei兄的这段代码看的不是很懂,尤其是有两个DO的那个地方
能否给小弟解释下?
作者: pengfei     时间: 2006-9-30 02:16
建议for /? 其实就是for语句的用法, 没什么.

ipconfig /all如果是宽带用户, 会显示两个ip两个mac地址, 以及两个网关.

用计数的方式实现了提取不同的IP和MAC以及网关. 如果不用这种计数方式提取指定几个数据, 就不好绑定网卡了.
作者: sea2moon     时间: 2006-9-30 02:20
for /f "tokens=2* delims=:" %%a in ('ipconfig /all ^| find "IP Address"') do (
    for /f "tokens=2* delims=:" %%i in ('ipconfig /all ^| find "Physical Address"') do
(
        set iptemp=%%a
        set mactemp=%%i
        if "!ipfilter!"=="0" set ip=!iptemp:~1!
        if "!macfilter!"=="0" set mac=!mactemp:~1!
        set /a ipfilter=!ipfilter!+1
        set /a macfilter=!macfilter!+1
    )

)
主要是这个地方不懂,有两个DO,我就蒙了,一个的我能理解
DO后面我只知道用的是commond (/...)

[ Last edited by sea2moon on 2006-9-30 at 02:23 ]
作者: pengfei     时间: 2006-9-30 02:24


  Quote:
Originally posted by sea2moon at 2006-9-30 02:20:
for /f "tokens=2* delims=:" %%a in ('ipconfig /all ^| find "IP Address"') do (
    for /f "tokens=2* delims=:" %%i in ('ipconfig /all ^| find "Physic ...

这是一个FOR语句嵌套的问题!
作者: sea2moon     时间: 2006-9-30 02:36
if "!ipfilter!"=="0" set ip=!iptemp:~1!
        if "!macfilter!"=="0" set mac=!mactemp:~1!
        set /a ipfilter=!ipfilter!+1
        set /a macfilter=!macfilter!+1
还有,这里也不太懂,不好意思啊。我初学没几天。。。
问题比较多,其中  if "!ipfilter!"=="0"变量ipfilter从设定一直为0,我改成
@echo off
for /f "tokens=2* delims=:" %%a in ('ipconfig /all ^| find "IP Address"') do (
    for /f "tokens=2* delims=:" %%i in ('ipconfig /all ^| find "Physical Address"') do (
        set iptemp=%%a
        set mactemp=%%i
        set ip=!iptemp:~1!
        set mac=!mactemp:~1!
    )
)
arp -s %ip% %mac%
也是可以的。我试了下(我只是内网)
不过,set /a ipfilter=!ipfilter!+1变量是不是在数值上+1,是什么意思,我在想,ipfilter这个变量最后在ARP上用到了没有?
谢谢peng兄的细心回复

[ Last edited by sea2moon on 2006-9-30 at 02:46 ]
作者: pengfei     时间: 2006-9-30 09:36


  Quote:
Originally posted by sea2moon at 2006-9-30 02:36:
if "!ipfilter!"=="0" set ip=!iptemp:~1!
        if "!macfilter!"=="0" set mac=!mactemp:~1!
        set /a ipfilter=!ipfilter!+1
        set /a macfilter=! ...

大家互相帮助...

你的内网可能只有一个IP和MAC, 这段代码在我的电脑上显示的是电信路由器的IP和MAC地址.

另外发现这段代码没有开启延缓的环境变量, 可能你没复制的时候出错了. setlocal enabledelayedexpansion
作者: ros244     时间: 2006-10-7 04:20
学习了
作者: weilong888     时间: 2006-10-7 06:12
这样的讨论真的能让人长见识。
作者: koney     时间: 2006-10-9 03:23
如果我是双网卡的PC
两快网卡的IP的网关都需要绑定
用上面提到的方法 可以绑定第一块网卡的IP和网关
那应该怎么检测是否有第二块网卡
如果有的话两块网卡一起绑定
作者: pengfei     时间: 2006-10-9 05:38
楼上兄弟把 ipconfig /all 的显示贴出来看看.
作者: 31676201     时间: 2006-12-4 12:34
DOS,代表着自由开放与发展,我们努力起來,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
作者: lxmxn     时间: 2006-12-4 13:15

  楼上的兄弟也不用这么灌水吧? 汗一个先……

作者: scriptor     时间: 2007-3-7 14:35
hehe
如果机器上采用了ipv6,怕是不行了
作者: INeverAsk     时间: 2007-11-5 07:30


  Quote:
Originally posted by 9527 at 2006-9-18 22:51:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('ipconfig/all^|findstr /i /c:"IP Address" /c:"Physical Address"^|sort') do set bb=!b ...

这段代码是否对网关也进行绑定,

如何查对是事成功对网关进行绑定