中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教nslookup -q=mx 163.com如何只得到邮箱服务器的地址
作者:
标题: 请教nslookup -q=mx 163.com如何只得到邮箱服务器的地址 上一主题 | 下一主题
qwedsa500
新手上路





积分 2
发帖 2
注册 2010-3-22
状态 离线
『楼 主』:  请教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 ]

2010-3-22 02:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  


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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-3-22 15:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwedsa500
新手上路





积分 2
发帖 2
注册 2010-3-22
状态 离线
『第 3 楼』:  

首先非常感谢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时,文件中也只有一条记录。

如何才能把四条记录都保存下来呢?

2010-3-22 23:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
luuk
初级用户





积分 69
发帖 46
注册 2010-3-18
来自 山东
状态 离线
『第 4 楼』:  

nslookup -q=mx 163.com  详细解释一下是什么意思。。nslookup用法是怎样啊,用来干哈的?

2010-3-23 09:57
查看资料  发送邮件  发短消息 网志  OICQ (980247224)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 5 楼』:  



  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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-3-23 16:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: