标题: [文件操作] 批处理如何提取nslookup域名解析结果中的ip地址并按指定格式输出 [打印本页]
作者: tian930 时间: 2016-10-21 10:34 标题: 批处理如何提取nslookup域名解析结果中的ip地址并按指定格式输出
本帖最后由 pcl_test 于 2016-10-21 12:48 编辑
求助:代码实现不了效果,编程实在不会
1、文本文件List.txt内容如下:
baidu.com
sina.com.cn
2、上面域名在cmd下nslookup后的结果如下:
C:\>nslookup baidu.com
服务器: google-public-dns-a.google.com
Address: 8.8.8.8
非权威应答:
名称: baidu.com
Addresses: 180.149.132.47
220.181.57.217
111.13.101.208
123.125.114.144
C:\>nslookup sina.com.cn
服务器: google-public-dns-a.google.com
Address: 8.8.8.8
非权威应答:
名称: sina.com.cn
Addresses: 202.108.33.107
202.108.33.60
C:\>
3、在论坛里搜索到的代码,然后自己改了好久,只改到这种程度,如下:
@echo off
( for /f "delims=" %%a in (List.txt) do (
for /f "delims=" %%b in ('nslookup %%a^|findstr "[0-9]$"') do (
set "Address=%%b"
set "Addresses=%%c"
setlocal enabledelayedexpansion
set "Address=!Address:*:=!"
set "Addresses=!Address:*:=!"
for %%d in (!Address!) do (
for %%e in (!Addresses!) do echo,DNS地址:%%d 域名:%%a 域名地址:%%e
endlocal
)
)
)
)>>Answer.txt
4、Answer.txt文件内容应该如下:
DNS地址:8.8.8.8 域名:baidu.com 域名地址:180.149.132.47
域名:baidu.com 域名地址:220.181.57.217
域名:baidu.com 域名地址:111.13.101.208
域名:baidu.com 域名地址:123.125.114.144
DNS地址:8.8.8.8 域名:sina.com.cn 域名地址:202.108.33.107
域名:sina.com.cn 域名地址:202.108.33.60
这个代码,我实在改不出来了,更别说answer.txt的理想内容如标题4的格式了!
求助大神,帮忙改改,谢谢!!
作者: DiamondbacK 时间: 2016-10-21 11:40
本帖最后由 DiamondbacK 于 2016-10-21 12:07 编辑
第三方 sed- # 2>nul 3>&2 & echo off & cls
- # & nslookup.exe < domain_list.txt | sed -rnf "%~f0" > Answer.txt
- # & pause & exit /b
- # 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本
-
- :L0
- /^>/ {
- h
- $! n
- :L1
- /^>/! {
- H
- $! { n; b L1 }
- }
- x
- s/^.+Address: *([.0-9]+)\s+名称: *([-.[:alnum:]]+)\nAddresses:\s*/域名: \2, DNS 地址: \1, 解析地址: /
- :L2
- s/^(.+解析地址: )(.*\n)\s*([.0-9]+)/\1\2\1\3/
- t L2
- p
- g
- $! b L0
- }
复制代码
第三方 gawk- # 2>nul 3>&2 & echo off & cls
- # & nslookup.exe < domain_list.txt | gawk -f "%~f0" > Answer.txt
- # & pause & exit /b
- # 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本
-
- BEGIN { RS = "\n*>"; FS = "[:\n]+[\t ]*" }
- $7 == "Addresses" {
- for (i = 8; i <= NF; i++) {
- print "域名: " $6 ", DNS 地址: " $4 ", 解析地址: " $i
- }
- }
复制代码
Windows 7 以上系统自带- :: 使用方法:将域名列表保存在同目录下的文件 domain_list.txt 中,然后运行脚本
- @echo off
-
- PowerShell -c "(gc .\domain_list.txt | nslookup.exe) -join \"`n\" -split '\n*>' | %% { $fields = $_ -split '[:\n]+[\t ]*'; if ($fields[6] -eq 'Addresses') { for ($i = 7; $i -lt $fields.count; $i++) { \"域名: $($fields[5]), DNS 地址: $($fields[3]), 解析地址: $($fields[$i])\" }}} > Answer.txt"
-
- pause & exit /b
复制代码
作者: tian930 时间: 2016-10-21 12:01
多谢~ 第三个可以,但是也不是太准确,我再自己改改,再次感谢!!
作者: pcl_test 时间: 2016-10-21 14:48
本帖最后由 pcl_test 于 2016-10-21 16:07 编辑
- @echo off
- for /f %%a in ('more +22 "%~f0"') do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%b in ('nslookup %%a 2^>^&1') do (
- for /f "tokens=1,2" %%c in ("#%%b") do (
- if /i "%%c" equ "#Address:" (
- set /p=DNS地址:%%d 域名:%%a<nul
- set s=%%dfedcba9876543210&set/an=0x!s:~15,1!
- for /l %%i in (1 1 !n!) do set "space=!space! "
- ) else (
- if not defined f (
- if /i "%%c" equ "#Addresses:" (
- echo; 域名地址:%%d
- set f=1
- )
- ) else if "%%c" equ "#" echo; !space!域名:%%a 域名地址:%%d
- )
- )
- )
- endlocal&echo;
- )
- pause&exit
- baidu.com
- sina.com.cn
复制代码
作者: tian930 时间: 2016-10-21 18:02
感谢版主:pcl_test 这个代码相当好用~~谢谢了!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |