利用shell(dig,expect等命令)对指定的递归器加热解析指定域名

本文介绍了一个通过Shell脚本(hot.sh, tst.sh, dig.sh)实现的方案,用于利用多进程对指定递归器进行域名热解析。首先,dn文件包含待解析的域名,src_dst_ip文件存储了递归器IP和对应城市的客户机地址。hot.sh作为主程序启动多进程。dig.sh则在与递归器同城的客户机上执行,发起域名请求。tst.sh借助expect脚本,实现远程登录这些客户机,将所需脚本拷贝并执行,以达到加热解析的效果。" 53931339,622967,IMX6Q设备树修改UART配置,"['嵌入式开发', '设备树', 'Linux内核']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件描述

dn:存放待加热的域名的文件

src_dst_ip:存放递归器ip以及与递归器同城的客户机地址对

hot.sh : 主程序,利用多进程完成加热效果

dig.sh :利用与递归器同城的客户机,对该递归器发起指定域名的请求

tst.sh: 利用expect,远程登录与递归器的同城客户机,将加热脚本(即dig.sh)、dn、src_dst_ip拷贝到客户机中,并令其执行dig.sh

 

hot.sh

#!bin/bash
p=0
while(true)
do
let p++
m=1
for src_dst_ip in `cat ./src_dst_ip | awk '{printf ("%s,%s\n",$1,$2);}'`
do
{
	let m++

	echo $src_dst_ip > tmp
	src_ip=`cat tmp |awk -F ',' '{print $1}'`
	dst_ip=`cat tmp |awk -F ',' '{print $2}'`
	expect tst.sh $src_ip LOGIN PASSWORD $dst_ip &
	if (( m==11 ))
	then
		let m=1
		wait
	fi
}
done
done


tst.sh

#!/usr/bin/expect -f

if { $argc < 3 } {
puts stderr "Usage: $argv0 IPAdress Login OldPasswd"
exit
}

set IPADDR [lindex $argv 0]
set LOGIN [lindex $argv 1]
set OLD_PW [lindex $argv 2]
set DIGUIQI [lindex $argv 3]
set timeout 30
#stty -echo 
spawn scp -P 57891  /home/dig.sh /home/dn  watch@$IPADDR:~/
expect {
  "*yes/no*" {
	send "yes"
   }
  "*password:*" {
        send "$OLD_PW\r"
    }
   "*Last login:*" {
        interact
#        exit 0
    }
    timeout {
        send_user "connection to $IPADDR timeout!\n"
#        exit 1
    }
    "*incorrect*" {
        send_user "password incorrect!\n"
#        exit 2
    }
    "*Permission*" {  #for LINUX ssh
        send_user "password Error!\n"
#        exit 2
    } 
}

expect eof

spawn ssh -o StrictHostKeyChecking=no  -p 57891  <a target=_blank href="mailto:LOGIN@$IPADDR">LOGIN@$IPADDR</a> 

expect {
  "*password:*" {
	send "$OLD_PW\r"
        
   }
}
expect {
  "*]$*" {
	send "sh  ~/dig.sh $DIGUIQI\n"
  }
}

expect {
 "*; <<>>*" {
	exp_continue
    }
 "*]$*" {
        send "exit\r"
  }
}
expect eof exit

 

dig.sh

#!bin/bash
i=0
j=1
h=0
for dn in `cat dn`
do
	for(( h=0;h<6;h++ ))
	do
		dig @$1 $dn | tee result.txt |  grep "NOERROR"
		if [[ $? == 0 ]]
		then
			cat result.txt 
			let i++
			echo $i
			break;
		fi
		cat result.txt
		sleep 1s
	done
	if [[ $i == 8 ]]
		then break
	fi
done


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值