下边命令中的某几个命令你会在"追踪垃圾邮件"练习中找到其用法,用来进行网络数据的转换和分析.信息与统计host通过名字或IP地址来搜索一个互联网主机的信息,使用DNS.bash$hostsurfacemail.comsurfacemail.com.hasaddress202.92.42.236ipcalc显示一个主机IP信息.使用-h选项,ipcalc将会做一个DNS的反向查询
下边命令中的某几个命令你会在 "追踪垃圾邮件" 练习中找到其用法, 用来进行网络数据的转换和分析.
信息与统计
- host
-
通过名字或 IP 地址来搜索一个互联网主机的信息, 使用 DNS.
bash$ host surfacemail.com surfacemail.com. has address 202.92.42.236
- ipcalc
-
显示一个主机 IP 信息. 使用 -h 选项, ipcalc 将会做一个 DNS 的反向查询, 通过 IP 地址找到主机(服务器)名.
bash$ ipcalc -h 202.92.42.236 HOSTNAME=surfacemail.com
- nslookup
-
通过 IP 地址在一个主机上做一个互联网的 "名字服务查询". 事实上这与 ipcalc -h 或 dig -x等价. 这个命令既可以交互运行也可以非交互运行, 换句话说, 就是在脚本中运行.
nslookup 命令据说已经慢慢被"忽视"了, 但是它还是有它的用处.
bash$ nslookup -sil 66.97.104.180 nslookup kuhleersparnis.ch Server: 135.116.137.2 Address: 135.116.137.2#53 Non-authoritative answer: Name: kuhleersparnis.ch
- dig
-
域信息查询. 与 nslookup 很相似, dig 在一个主机上做一个互联网的 "名字服务查询". 这个命令既可以交互运行也可以非交互运行, 换句话说, 就是在脚本中运行.
下边是一些 dig 命令有趣的选项, +time=N 选项用来设置查询超时为 N 秒, +nofail 选项用来持续查询服务器直到收到一个响应, -x 选项会做反向地址查询.
比较下边这3个命令的输出, dig -x , ipcalc -h 和 nslookup.
bash$ dig -x 81.9.6.2 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 11649 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;2.6.9.81.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 6.9.81.in-addr.arpa. 3600 IN SOA ns.eltel.net. noc.eltel.net. 2002031705 900 600 86400 3600 ;; Query time: 537 msec ;; SERVER: 135.116.137.2#53(135.116.137.2) ;; WHEN: Wed Jun 26 08:35:24 2002 ;; MSG SIZE rcvd: 91
Example 12-36. 查找滥用的连接来报告垃圾邮件发送者
#!/bin/bash # spam-lookup.sh: 查找滥用的连接来报告垃圾邮件发送者. # 感谢 Michael Zick. # 检查命令行参数. ARGCOUNT=1 E_WRONGARGS=65 if [ $# -ne "$ARGCOUNT" ] then echo "Usage: `basename $0` domain-name" exit $E_WRONGARGS fi dig +short $1.contacts.abuse.net -c in -t txt # 也试试: # dig +nssearch $1 # 尽量找到 "可信赖的名字服务器" 并且显示 SOA 记录. # 下边这句也可以: # whois -h whois.abuse.net $1 # ^^ ^^^^^^^^^^^^^^^ 指定主机. # 使用这个命令也可以查找多个垃圾邮件发送者, 比如:" # whois -h whois.abuse.net $spamdomain1 $spamdomain2 . . . # 练习: # ----- # 扩展这个脚本的功能, #+ 让它可以自动发送 e-mail 来通知 #+ 需要对此负责的 ISP 的联系地址. # 暗示: 使用 "mail" 命令. exit $? # spam-lookup.sh chinatietong.com # 一个已知的垃圾邮件域.(译者: 中国铁通. . .) # "crnet_mgr@chinatietong.com" # "crnet_tec@chinatietong.com" # "postmaster@chinatietong.com" # 如果想找到这个脚本的一个更详尽的版本, #+ 请访问 SpamViz 的主页, http://www.spamviz.net/index.html.
-
-
Example 12-37. 分析一个垃圾邮件域<rojy bug>
#! /bin/bash # is-spammer.sh: 鉴别一个垃圾邮件域 # $Id: is-spammer, v 1.4 2004/09/01 19:37:52 mszick Exp $ # 上边这行是 RCS ID 信息. # # 这是附件中捐献脚本 is_spammer.bash #+ 的一个简单版本. # is-spammer <domain.name> # 使用外部程序: 'dig' # 测试版本: 9.2.4rc5 # 使用函数. # 使用 IFS 来分析分配在数组中的字符串. # 检查 e-mail 黑名单. # 使用来自文本体中的 domain.name: # http://www.good_stuff.spammer.biz/just_ignore_everything_else # ^^^^^^^^^^^ # 或者使用来自任意 e-mail 地址的 domain.name: # Really_Good_Offer@spammer.biz # # 并将其作为这个脚本的唯一参数. #(另: 你的 Inet 连接应该保证连接) # # 这样, 在上边两个实例中调用这个脚本: # is-spammer.sh spammer.biz # Whitespace == :Space:Tab:Line Feed:Carriage Return: WSP_IFS=$'\x20'$'\x09'$'\x0A'$'\x0D' # No Whitespace == Line Feed:Carriage Return No_WSP=$'\x0A'$'\x0D' # 域分隔符为点分10进制 ip 地址 ADR_IFS=${No_WSP}'.' # 取得 dns 文本资源记录. # get_txt <error_code> <list_query> get_txt() { # 分析在"."中分配的 $1. local -a dns IFS=$ADR_IFS dns=( $1 ) IFS=$WSP_IFS if [ "${dns[0]}" == '127' ] then # 查看此处是否有原因. echo $(dig +short $2 -t txt) fi } # 取得 dns 地址资源记录. # chk_adr <rev_dns> <list_server> chk_adr() { local reply local server local reason server=${1}${2} reply=$( dig +short ${server} ) # 假设应答可能是一个错误码 . . . if [ ${#reply} -gt 6 ] then reason=$(get_txt ${reply} ${server} ) reason=${reason:-${reply}} fi echo ${reason:-' not blacklisted.'} } # 需要从名字中取得 IP 地址. echo 'Get address of: '$1 ip_adr=$(dig +short $1) dns_reply=${ip_adr:-' no answer '} echo ' Found address: '$
-