Board logo

标题: [文本处理] 使用批处理脚本获取本机真实IP地址 [打印本页]

作者: cidsxwf    时间: 2019-1-18 09:25     标题: 使用批处理脚本获取本机真实IP地址

因本机安装了虚拟机,所以多了2个虚拟网卡
[attach]11737[/attach]
所以编写以下代码过滤虚拟网卡,获取真实IP,但是有BUG,如果本地IP为固定IP地址,则会显示"默认"。

以下是动态IP地址获取状态,正常状态:

以下是固态IP地址获取,不正常

请问改如何修改
  1. @echo on
  2. for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
  3. set IP=%%a
  4. )
  5. echo 你的局域网IP是:
  6. echo %IP%
  7. pause>nul
复制代码

作者: Batcher    时间: 2019-1-18 09:46

把 route print 的完整结果发出来,不要截图。

怎样把CMD窗口里的结果复制出来?
http://bbs.bathome.net/thread-3473-1-1.html
作者: cidsxwf    时间: 2019-1-18 10:00

回复 2# Batcher
  1. C:\Users\king\Desktop>for /F "tokens=4" %a in ('route print|findstr 0.0.0.0.*0.0.0.0') do (set IP=%a )
  2. C:\Users\king\Desktop>(set IP=192.168.0.127 )
  3. C:\Users\king\Desktop>(set IP=默认 )
  4. C:\Users\king\Desktop>echo 你的局域网IP是:
  5. 你的局域网IP是:
  6. C:\Users\king\Desktop>echo 默认
  7. 默认
  8. C:\Users\king\Desktop>pause1>nul
复制代码

作者: yhcfsr    时间: 2019-1-18 10:01

  1. @echo off
  2. for /f "tokens=1,2,3 delims=={,}" %%a in ('wmic NICCONFIG where "IPEnabled='TRUE'" get DefaultIPGateway^,DNSServerSearchOrder^,IPAddress^,IPSubnet /value^|findstr "={"') do (
  3. if "%%a"=="DefaultIPGateway" (set "Gate=%%~b"
  4. ) else if "%%a"=="DNSServerSearchOrder" (set "DSN1=%%~b"&set "DSN2=%%~c"
  5. ) else if "%%a"=="IPAddress" (set "IP=%%~b"
  6. ) else if "%%a"=="IPSubnet" (set "Mask=%%~b")
  7. if defined Gate if defined Mask goto :show
  8. )
  9. :show
  10. echo;I P 地址: %IP%
  11. echo;子网掩码: %Mask%
  12. echo;默认网关: %Gate%
  13. echo;首选 DNS: %DSN1%
  14. echo;备用 DNS: %DSN2%
  15. pause
复制代码

作者: Batcher    时间: 2019-1-18 10:01

回复 3# cidsxwf


    可能是我表达不清楚,打开一个CMD窗口,单独执行命令 route print 的完整结果发出来
作者: cidsxwf    时间: 2019-1-18 10:09

回复 5# Batcher
  1. Microsoft Windows [版本 10.0.17763.253]
  2. (c) 2018 Microsoft Corporation。保留所有权利。
  3. C:\Users\king>route print
  4. ===========================================================================
  5. 接口列表
  6. 15...ac d1 b8 2e 44 47 ......Realtek RTL8723BE Wireless LAN 802.11n PCI-E NIC
  7. 20...ae d1 b8 2e 44 47 ......Microsoft Wi-Fi Direct Virtual Adapter
  8. 14...ac d1 b8 2e 44 47 ......Microsoft Wi-Fi Direct Virtual Adapter #2
  9.   9...68 f7 28 ab 12 0a ......Intel(R) Ethernet Connection (3) I218-V
  10. 17...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
  11.   3...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
  12. 18...ac d1 b8 2e 44 48 ......Bluetooth Device (Personal Area Network)
  13.   1...........................Software Loopback Interface 1
  14. ===========================================================================
  15. IPv4 路由表
  16. ===========================================================================
  17. 活动路由:
  18. 网络目标        网络掩码          网关       接口   跃点数
  19.           0.0.0.0          0.0.0.0      192.168.0.1    192.168.0.112     35
  20.         127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
  21.         127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  22.   127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  23.       192.168.0.0    255.255.255.0            在链路上     192.168.0.112    291
  24.     192.168.0.112  255.255.255.255            在链路上     192.168.0.112    291
  25.     192.168.0.255  255.255.255.255            在链路上     192.168.0.112    291
  26.     192.168.237.0    255.255.255.0            在链路上     192.168.237.1    291
  27.     192.168.237.1  255.255.255.255            在链路上     192.168.237.1    291
  28.   192.168.237.255  255.255.255.255            在链路上     192.168.237.1    291
  29.     192.168.247.0    255.255.255.0            在链路上     192.168.247.1    291
  30.     192.168.247.1  255.255.255.255            在链路上     192.168.247.1    291
  31.   192.168.247.255  255.255.255.255            在链路上     192.168.247.1    291
  32.         224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
  33.         224.0.0.0        240.0.0.0            在链路上     192.168.0.112    291
  34.         224.0.0.0        240.0.0.0            在链路上     192.168.237.1    291
  35.         224.0.0.0        240.0.0.0            在链路上     192.168.247.1    291
  36.   255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  37.   255.255.255.255  255.255.255.255            在链路上     192.168.0.112    291
  38.   255.255.255.255  255.255.255.255            在链路上     192.168.237.1    291
  39.   255.255.255.255  255.255.255.255            在链路上     192.168.247.1    291
  40. ===========================================================================
  41. 永久路由:
  42.   无
  43. IPv6 路由表
  44. ===========================================================================
  45. 活动路由:
  46. 接口跃点数网络目标                网关
  47.   1    331 ::1/128                  在链路上
  48.   9    291 fe80::/64                在链路上
  49. 17    291 fe80::/64                在链路上
  50.   3    291 fe80::/64                在链路上
  51.   3    291 fe80::b5d2:633f:e766:7765/128
  52.                                     在链路上
  53. 17    291 fe80::d927:d221:67cd:7621/128
  54.                                     在链路上
  55.   9    291 fe80::e46b:4050:4f36:7a14/128
  56.                                     在链路上
  57.   1    331 ff00::/8                 在链路上
  58.   9    291 ff00::/8                 在链路上
  59. 17    291 ff00::/8                 在链路上
  60.   3    291 ff00::/8                 在链路上
  61. ===========================================================================
  62. 永久路由:
  63.   无
  64. C:\Users\king>
复制代码

作者: cidsxwf    时间: 2019-1-18 10:12

回复 4# yhcfsr
感谢大佬
作者: Batcher    时间: 2019-1-18 11:38

回复 6# cidsxwf


没有看到“默认”这两个字,执行这个命令的结果呢:
  1. route print|findstr 0.0.0.0.*0.0.0.0
复制代码

作者: hnfeng    时间: 2019-1-18 11:49

  1. for /f "tokens=4" %a in ('route print ^| find " 0.0.0.0 "') do echo %a
复制代码
你的 route print|findstr 0.0.0.0.*0.0.0.0 已经是错的了。而且还多了一个点
作者: ivor    时间: 2019-1-18 15:37

本帖最后由 ivor 于 2019-1-18 15:40 编辑

powershell
  1. (Test-Connection -ComputerName $env:ComputerName -Count 1).IPV4Address.IPAddressToString
复制代码
cmd
  1. powershell -c "(Test-Connection -ComputerName $env:ComputerName -Count 1).IPV4Address.IPAddressToString"
复制代码

作者: 窄口牛    时间: 2019-1-18 16:08

本帖最后由 窄口牛 于 2019-1-18 16:56 编辑

回复 4# yhcfsr


     这个加上mac地址 计算机名 网卡名称呢?
  1. @echo off
  2. for /f "tokens=1,2,3,4,5,6 delims=={,}" %%a in ('wmic NICCONFIG where "IPEnabled='TRUE'" get Description^,MacAddress^,ServiceName^,DefaultIPGateway^,DNSServerSearchOrder^,IPAddress^,IPSubnet /value^|findstr "={"') do (
  3. if "%%a"=="Description" (set "Name=%%~b"
  4. ) else if "%%a"=="MacAddress" (set "MAC=%%~b"
  5. ) else if "%%a"=="ServiceName" (set "Chip=%%~b"
  6. ) else if "%%a"=="DefaultIPGateway" (set "Gate=%%~b"
  7. ) else if "%%a"=="DNSServerSearchOrder" (set "DSN1=%%~b"&set "DSN2=%%~c"
  8. ) else if "%%a"=="IPAddress" (set "IP=%%~b"
  9. ) else if "%%a"=="IPSubnet" (set "Mask=%%~b")
  10. if defined Gate if defined Mask goto :show
  11. )
  12. :show
  13. echo;网卡名称: %Name%
  14. echo;MAC 地址: %MAC%
  15. echo;网卡芯片: %Chip%
  16. echo;I P 地址: %IP%
  17. echo;子网掩码: %Mask%
  18. echo;默认网关: %Gate%
  19. echo;首选 DNS: %DSN1%
  20. echo;备用 DNS: %DSN2%
  21. pause
复制代码
照猫画虎,哪里有问题?
作者: yhcfsr    时间: 2019-1-18 18:35

回复 11# 窄口牛
  1. @echo off
  2. for /f "tokens=1,2,3 delims=={,}" %%a in ('wmic NICCONFIG where "IPEnabled='TRUE'" get Description^,MacAddress^,ServiceName^,DefaultIPGateway^,DNSServerSearchOrder^,IPAddress^,IPSubnet /value^|findstr "="') do (
  3. if "%%a"=="Description" (set "Name=%%~b"
  4. ) else if "%%a"=="DefaultIPGateway" (set "Gate=%%~b"
  5. ) else if "%%a"=="DNSServerSearchOrder" (set "DSN1=%%~b"&set "DSN2=%%~c"
  6. ) else if "%%a"=="IPAddress" (set "IP=%%~b"
  7. ) else if "%%a"=="IPSubnet" (set "Mask=%%~b"
  8. ) else if "%%a"=="MACAddress" (set "MAC=%%~b"
  9. ) else if "%%a"=="ServiceName" (set "Chip=%%~b")
  10. if defined Gate if defined Chip goto :show
  11. )
  12. :show
  13. echo;网卡名称: %Name%
  14. echo;MAC 地址: %MAC%
  15. echo;网卡芯片: %Chip%
  16. echo;I P 地址: %IP%
  17. echo;子网掩码: %Mask%
  18. echo;默认网关: %Gate%
  19. echo;首选 DNS: %DSN1%
  20. echo;备用 DNS: %DSN2%
  21. pause
复制代码

作者: 窄口牛    时间: 2019-1-18 20:20

明白了,谢谢!
作者: uranus12    时间: 2020-11-14 14:36

回复  窄口牛
yhcfsr 发表于 2019-1-18 18:35



    大佬,您好,你的批处理如果是只连接了单有线网卡可以获取到,但wifi的网卡一起连接的时候,只能获取到WIFI的信息,能否把2个网卡的信息一起获取到?




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