Board logo

标题: 请教nslookup -q=mx 163.com如何只得到邮箱服务器的地址 [打印本页]

作者: qwedsa500     时间: 2010-3-22 02:57    标题: 请教nslookup -q=mx 163.com如何只得到邮箱服务器的地址

各位大侠好,小弟刚发现这个论坛,感觉水很深,要学的东西太多了。

小弟想实现一个功能,就是用一条命令,实现根据E-Mail地址得到邮件服务器IP的功能。举个例子,待查邮箱是abc@163.com
小弟现在是分步做的,具体步骤是:
1.取出163.com。
2.执行nslookup -q=mx 163.com得到
Server:  localhost
Address:  192.168.0.1

Non-authoritative answer:
163.com MX preference = 10, mail exchanger = mxnew-c.163.com
163.com MX preference = 10, mail exchanger = mxnew-d.163.com
163.com MX preference = 10, mail exchanger = mxnew-a.163.com
163.com MX preference = 10, mail exchanger = mxnew-b.163.com
3.取出mxnew-a.163.com
4.执行nslookup mxnew-a.163.com得到
Server:  localhost
Address:  192.168.0.1

Non-authoritative answer:
Name:    mxnew-a.163.com
Addresses:  220.181.12.58, 220.181.12.86, 220.181.12.52, 220.181.12.53
          220.181.12.55, 220.181.12.56, 220.181.12.57
5.取出任意一个IP地址

我知道不一定能结合到一句里面,但是还是想请教各位老大。
小弟现在做的是把步骤2、3整合到一句中,用的命令是
C:\>for /f "skip=1 tokens=2 delims= " %a in ('echo exit^|nslookup -q=mx 163.com') do @echo %a
但是这句执行的时候,总是出现如下错误
*** Can't find server name for address 220.181.31.8: No response from server
*** UnKnown can't find mx: No response from server
220.181.31.8
我是看了http://www.cn-dos.net/forum/view ... 0405&sid=RVd000这个帖子lifeisn老大的回复才有的这个想法,不知哪里错了,还请高手不吝赐教,小弟跪谢~~~~

[ Last edited by qwedsa500 on 2010-3-22 at 02:59 ]
作者: Hanyeguxing     时间: 2010-3-22 15:04

nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=3,5" %a in (t.h) do @if "%a"=="address" echo %b)&del t.h
运行:nslookup -q=mx 163.com得到返回信息:
Server:  cache.ctnt.com.cn
Address:  219.150.32.132

Non-authoritative answer:
163.com        MX preference = 10, mail exchanger = mxnew-c.163.com
163.com        MX preference = 10, mail exchanger = mxnew-d.163.com
163.com        MX preference = 10, mail exchanger = mxnew-a.163.com
163.com        MX preference = 10, mail exchanger = mxnew-b.163.com

163.com        nameserver = ns4.nease.net
163.com        nameserver = ns3.nease.net
mxnew-c.163.com        internet address = 220.181.12.59
mxnew-c.163.com        internet address = 220.181.12.60
mxnew-c.163.com        internet address = 220.181.12.61
mxnew-c.163.com        internet address = 220.181.12.62
mxnew-c.163.com        internet address = 220.181.12.63
mxnew-c.163.com        internet address = 220.181.12.64
mxnew-c.163.com        internet address = 220.181.12.65
mxnew-c.163.com        internet address = 220.181.12.66
mxnew-c.163.com        internet address = 220.181.12.67
mxnew-c.163.com        internet address = 220.181.12.68
mxnew-c.163.com        internet address = 220.181.12.69
mxnew-c.163.com        internet address = 220.181.12.51
然后根据文件进行for /f解析

2>nul是用来屏蔽Non-authoritative answer:的

以上信息都是命令在xp sp3下运行后返回的

如果想得到任意一个地址,可以:
nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=3,5" %a in (t.h) do @if "%a"=="address" set b=%b)&del t.h|echo %b%
在这里,用&&或&都可以,推荐用&&。
管道 | 在这里起扩展%b%延迟的作用

[ Last edited by Hanyeguxing on 2010-3-23 at 16:37 ]
作者: qwedsa500     时间: 2010-3-22 23:47
首先非常感谢Hanyeguxing老大,指路明灯啊~~~
在老大的孜孜教诲下,小弟把您的命令改成如下格式:
nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @if "%a"=="exchanger" set b=%b)&del t.h|echo %b%
这样就可以取出mx服务器的域名了,不知怎么的,这里执行nslookup -q=mx 163.com和您那里面不太一样,我这里显示的是:
Server:  localhost
Address:  192.168.0.1

Non-authoritative answer:
163.com MX preference = 10, mail exchanger = mxnew-b.163.com
163.com MX preference = 10, mail exchanger = mxnew-c.163.com
163.com MX preference = 10, mail exchanger = mxnew-d.163.com
163.com MX preference = 10, mail exchanger = mxnew-a.163.com
只有上面这几行,没有具体解析出IP地址……

当我使用下面这条命令的时候
nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @echo %b)&del t.h
可以把4个mx服务器的域名全取出来,结果是:
mxnew-a.163.com
mxnew-b.163.com
mxnew-c.163.com
mxnew-d.163.com

我还想问一下,如果我想把这四条记录都存到文件中应该怎么改写上面的语句啊?
我试过两种方法:
1、nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @if "%a"=="exchanger" set b=%b)&del t.h|echo %b%
结果:屏幕显示一条记录如下:
mxnew-a.163.com
当我改写成nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @if "%a"=="exchanger" set b=%b)&del t.h|echo %b% >w.h时,文件中也只有这一条记录。
2、nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @echo %b)&del t.h
结果:屏幕显示四条记录如下:
mxnew-a.163.com
mxnew-b.163.com
mxnew-c.163.com
mxnew-d.163.com
当我改写成nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @echo %b>w.h)&del t.h时,文件中也只有一条记录。

如何才能把四条记录都保存下来呢?
作者: luuk     时间: 2010-3-23 09:57
nslookup -q=mx 163.com  详细解释一下是什么意思。。nslookup用法是怎样啊,用来干哈的?
作者: Hanyeguxing     时间: 2010-3-23 16:09


  Quote:
Originally posted by luuk at 2010-3-23 09:57:
nslookup -q=mx 163.com  详细解释一下是什么意思。。nslookup用法是怎样啊,用来干哈的?

用来解析163.com邮件交换器的ip地址

  Quote:
Originally posted by qwedsa500 at 2010-3-22 23:47:
当我改写成nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=7,9" %a in (t.h) do @echo %b>w.h)&del t.h时,文件中也只有一条记录。
如何才能把四条记录都保存下来呢?

你把
nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=9" %a in (t.h) do @echo %a>w.h)&del t.h
写成
nslookup -q=mx 163.com>t.h 2>nul&&(for /f "tokens=9" %a in (t.h) do @echo %a)>w.h&del t.h
就可以了

[ Last edited by Hanyeguxing on 2010-3-23 at 17:32 ]