当由于超时而无法parsing主机名时,我需要testing应用程序的行为。 在/etc/resolv.conf
设置nameserver 127.0.0.1
不起作用:相关函数立即返回一个exception。 testing装置是一个由Vagrant创build的虚拟机,通过DHCP接收其IP地址。
nameserver 127.0.0.1
将无法正常工作,因为默认行为已经是这样了。 相反,请尝试使用不存在的DNS。 为了确保,你可以这样做:
nslookup example.com 192.0.2.10
如果你没有回应,那么你可以使用192.0.2.10
作为你的DNS服务器。
当DNS服务器根本没有响应,或没有及时响应时,就会发生连接超时。
第一种可以通过在Linux系统上简单地阻塞所有DNSstream量来模拟,例如:
# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP
使用DROP作为目标意味着你甚至不会连接被拒绝的错误,这就变成了一个黑洞。 (通常情况下,您不太可能进行区域传输,因此不需要使用UDP来阻止TCP协议。)
创build延迟稍微多一些。 从netem
手册 :
# tc qdisc add dev eth0 root handle 1: prio # tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit 3000 # tc qdisc add dev eth0 parent 30:1 handle 31: netem delay 200ms 10ms distribution normal # tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst <IP_of_DNS_server>/32 flowid 1:3
这产生了一个200ms的延迟,随机变化为±10ms。
你需要的是一个“黑洞服务器”。 您可以使用blackhole.webpagetest.org
( 72.66.115.13
),它将默默地放弃所有请求。
为什么我对其他答案提出这个build议,是因为上述服务器是为了这个唯一目的而build立的。
barend@shells:~$ dig example.com @72.66.115.13 ; <<>> DiG 9.10.3-P4-Debian <<>> example.com @72.66.115.13 ;; global options: +cmd ;; connection timed out; no servers could be reached
如果您的testing系统上没有运行DNS服务器,您应该可以使用它的IP地址。
你可以尝试使用未使用的rfc1918地址。
您可以使用服务器的防火墙来阻止目标端口53的传出数据包。