无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7766|回复: 11
打印 上一主题 下一主题

[求助]如何用命令行自动分析网站的ip?

[复制链接]
跳转到指定楼层
1#
发表于 2006-10-20 00:32:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用ping 命令可以分析域名的 ip。但是我想用一个命令行分析域名的ip,并且把这个ip存入变量。

有那些命令可以做到呢?
2#
 楼主| 发表于 2006-10-20 00:45:28 | 只看该作者
换个方式提问
在命令行下输入如下命令:
ping abc.com >a.txt

a.txt的内容如下:

Pinging abc.com [199.181.132.250] with 32 bytes of data:



Reply from 199.181.132.250: bytes=32 time=322ms TTL=114

Reply from 199.181.132.250: bytes=32 time=509ms TTL=114

Reply from 199.181.132.250: bytes=32 time=558ms TTL=114

Reply from 199.181.132.250: bytes=32 time=460ms TTL=114



Ping statistics for 199.181.132.250:

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

    Minimum = 322ms, Maximum = 558ms, Average = 462ms

如何提取[199.181.132.250] 里面ip那段内容,存入变量呢?
回复

使用道具 举报

3#
发表于 2006-10-20 01:08:52 | 只看该作者
暂不考虑 Ping 不通的情况

  1. @echo off
  2. for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i ^"reply^"') do set IP=%%i
  3. set IP=%IP::=%
  4. echo %IP%
  5. pause
复制代码
回复

使用道具 举报

4#
 楼主| 发表于 2006-10-20 01:48:07 | 只看该作者
这个是用来做杀毒软件绿色版升级用的,域名当然会通。

谢谢老毛桃 ^_^
回复

使用道具 举报

5#
发表于 2006-10-20 09:21:52 | 只看该作者
@echo off
for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i ^"reply^"') do set IP=%%i
set IP=%IP::=%
echo %IP%
pause

能讲讲是什么意思吗?DOS学的好菜啊。
回复

使用道具 举报

6#
发表于 2006-10-20 12:37:53 | 只看该作者
原帖由 jasonwang 于 2006-10-20 09:21 发表
@echo off
for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i ^"reply^"') do set IP=%%i
set IP=%IP::=%
echo %IP%
pause

能讲讲是什么意思吗?DOS学的好菜啊。

for 我就不说了,本区就有不少介绍 for 的。

ping www.sina.com.cn -n 1,表示 ping 一下 www.sina.com.cn 的所在服务器,-n 1 意思为只提交一次请求。得到的运行结果如下:
  1. C:\>ping www.sina.com.cn -n 1

  2. Pinging jupiter.sina.com.cn [61.172.201.194] with 32 bytes of data:

  3. Reply from 61.172.201.194: bytes=32 time=6ms TTL=244

  4. Ping statistics for 61.172.201.194:
  5.     Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
  6. Approximate round trip times in milli-seconds:
  7.     Minimum = 6ms, Maximum = 6ms, Average = 6ms
复制代码

很显然,虽然我们得到了服务器的 IP 地址,但却无法单独将他们提取出来并赋值到一个变量。于是我用了下面的命令

ping www.sina.com.cn -n 1|find /i "reply"

这样的话,只会得到含有字符串 Reply 的那一行,因为这一行里面存在 IP 地址嘛!运行后的结果如下:
  1. C:\>ping www.sina.com.cn -n 1|find /i "reply"
  2. Reply from 61.172.201.194: bytes=32 time=7ms TTL=244
复制代码

for /f "tokens=3" %i ... 是用来提取上面的运行结果中的第三个符号,默认的分隔符为空格,这样的话,我们得到的变量 %i 的值就是 61.172.201.194:

由于我们需要求得单纯的 IP,但是偏偏这里存在一个冒号“:”,得想办法将它去掉啊,下面的命令就是干这个的:

set IP=%IP:=%

这样的话,得到的变量 %IP% 的值就是去掉了冒号“:”的纯 IP 字符串了。但是由于冒号“:”是一个特殊的字符串,命令本身含有一个冒号“:”,我们用两个冒号“::”即可实现。

同样地,前面的查找 Reply 的语句中出现的引号“"”也是特殊字符,还有在它前面出现的管道符“|”也是特殊字符,我们需要按照微软的要求,在这些字符的前面加上一个控制符“^”。

要在批处理使用 % 的话,也要用两个 %% 表示,但是注意,这个批处理中的 %% 用法不是这样的,是因为 %i 在批处理中本身有其它定义,直接在命令中执行的话,%i 就可以表达,但是在批处理中执行时,为了让它跟原本 %i 在批处理中的定义区别开,需要用 %%i 表示。

好了,我说完了。有不准确的地方,还请大师们指正!
回复

使用道具 举报

7#
发表于 2006-10-20 12:49:45 | 只看该作者
我来个更简洁一点的:

  1. @echo off
  2. for /f "tokens=2 delims=[]" %%i in ('ping www.sina.com.cn -n 1 ^|findstr "["') do echo %%i
  3. pause
复制代码


其实,老毛桃3F的代码可以精简如下:

  1. @echo off
  2. for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i "reply"') do set IP=%%i
  3. echo %IP:~0,-1%
  4. pause
复制代码


分析已经相当精彩了,我再来补充几个地方吧:
原帖由 老毛桃 于 2006-10-20 12:37 PM 发表

由于我们需要求得单纯的 IP,但是偏偏这里存在一个冒号“:”,得想办法将它去掉啊,下面的命令就是干这个的:
set IP=%IP:=%
这样的话,得到的变量 %IP% 的值就是去掉了冒号“:”的纯 IP 字符串了。但是由于冒号“:”是一个特殊的字符串,命令本身含有一个冒号“:”,我们用两个冒号“::”即可实现。
同样地,前面的查找 Reply 的语句中出现的引号“"”也是特殊字符,还有在它前面出现的管道符“|”也是特殊字符,我们需要按照微软的要求,在这些字符的前面加上一个控制符“^”。


  替换字符串中的某串字符的格式是 set str=!var1:%var2%=%var3%!,意思是,把%var1%中所有的%var2%替换成%var3%,并用str来接收,而冒号并非特殊字符,而是替换语句中的固定格式中含有冒号,而你要替换的是冒号,所以就得再写一个冒号,以至于看起来就像两个冒号连用了。

  虽然管道符号是特殊符号,但是,用管道符号连接的语句并非都要用^来转义,比如,echo 1234|find "5">nul && echo yes||echo no语句中,就不必使用^,使用^反倒出错。但是在 ping 语句中却必须用转义符号,同样必须使用转义符号的还有dir,不清楚是为什么,还有待各位去发现。

[ 本帖最后由 namejm 于 2006-10-20 01:15 PM 编辑 ]
回复

使用道具 举报

8#
发表于 2006-10-20 13:39:05 | 只看该作者
@echo off
for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i "reply"') do set IP=%%i
echo %IP:~0,-1%
pause

%%i是不是相当于一个变量符号? find /i这个/i是什么意思? 

/i的意思是 “”中字符开始的那一行吧?

[ 本帖最后由 jasonwang 于 2006-10-20 01:44 PM 编辑 ]
回复

使用道具 举报

9#
发表于 2006-10-20 20:26:40 | 只看该作者
原帖由 jasonwang 于 2006-10-20 13:39 发表
@echo off
for /f "tokens=3" %%i in ('ping www.sina.com.cn -n 1^|find /i "reply"') do set IP=%%i
echo %IP:~0,-1%
pause

%%i是不是相当于一个变量符号? find /i这个/i是什么意思 ...

/i 就是忽略大小写,楼上已经说了。
原帖由 yfd11 于 2006-10-20 14:20 发表
C:\>ping www.sina.com.cn -n 1|find /i "reply"
Reply from 61.172.201.194: bytes=32 time=7ms TTL=244
能不能用/
ping www.sina.com.cn -n 1|find /i "Ping statistics for" >ip ...

本来一段批处理可以搞定,还要生成一个临时文件,何必呢?用 for 会极大地提高批处理的效率
回复

使用道具 举报

10#
发表于 2006-10-24 20:41:56 | 只看该作者
这么多高人啊,佩服佩服!以后多向你们学习
回复

使用道具 举报

11#
发表于 2006-10-30 09:16:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

12#
发表于 2006-11-1 11:53:46 | 只看该作者
原帖由 namejm 于 2006-10-20 12:49 发表
  替换字符串中的某串字符的格式是 set str=!var1:%var2%=%var3%!,意思是,把%var1%中所有的%var2%替换成%var3%,并用str来接收,而冒号并非特殊字符,而是替换语句中的固定格式中含有冒号,而你要替换的是冒号,所以就得再写一个冒号,以至于看起来就像两个冒号连用了。

  虽然管道符号是特殊符号,但是,用管道符号连接的语句并非都要用^来转义,比如,echo 1234|find "5">nul && echo yes||echo no语句中,就不必使用^,使用^反倒出错。但是在 ping 语句中却必须用转义符号,同样必须使用转义符号的还有dir,不清楚是为什么,还有待各位去发现。

呵呵,谢谢。又学到了一些,哈哈!

set str=!var1:%var2%=%var3%!

晕啊,以前搞 ASP 的时候,正则表达式没有好好学。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-27 10:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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