如何搭建TCP代理(三)
来源:岁月联盟
时间:2020-03-24
an = dns_answer
)
print("Resolved DNS request for %s to %s for %s" %
(queried_host, resolved_ip, ip.src))
# Use scapy to send our response back to your phone.
scapy.send(dns_response, iface=iface)
else:
print("Ignoring unrecognized packet from %s" % ip.src)
return handle_packet
def _get_local_ip(iface):
ni.ifaddresses(iface)
return ni.ifaddresses(iface)[ni.AF_INET][0]['addr']
def run(iface, local_ip, sniff_filter, spoof_domains):
print("#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#")
print("-#-#-#-#-#-RUNNING DNS SPOOFER-#-#-#-#-#-")
print("#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#")
print("Interface:/t/t/t%s" % iface)
print("Resolving to IP:/t/t%s" % local_ip)
print("Spoof domains:/t/t%s" % ', '.join(spoof_domains))
print("BPF sniff filter:/t/t%s" % sniff_filter)
print("")
print("Waiting for DNS requests...")
print("(Make sure the device you are targeting is set to use"/
"your local IP (%s) as its DNS server)" % local_ip)
scapy.sniff(iface=iface,
filter=sniff_filter,
prn=handle_packet_fn(iface, local_ip, spoof_domains))
IFACE= 'en0'
local_ip = _get_local_ip(IFACE)
# The local IP of your phone
client_ip = '192.168.42.74'
SPOOF_DOMAINS = ['nonhttps.com', 'www.nonhttps.com']
SNIFF_FILTER = ("udp port 53 && dst %s && src %s" %
(local_ip, client_ip))
run(IFACE, local_ip, SNIFF_FILTER, SPOOF_DOMAINS)
启动DNS服务器后,请确保如上所述将智能手机的DNS服务器仍设置为笔记本电脑。在智能手机上访问一些网站,然后回头查看终端,你应该看到DNS请求来自你的智能手机,并被我们的DNS服务器记录。
我们服务器的行为取决于DNS请求所针对的主机名,如果请求的是我们的目标主机名(当前在脚本中设置为nonhttps.com,因为我们还不需要担心HTTPS),则我们的服务器将使用你笔记本电脑的本地IP地址进行响应。对于所有其他的,它会向一个真正的DNS服务器发出自己的真正的DNS请求,并使用真实答案以真相响应你的智能手机。
这意味着你的智能手机现在可以使用我们伪造的DNS服务器,针对除目标以外的所有主机名,将主机名准确解析为IP地址。除了我们当前的目标nonhttps.com之外,它的连网状态应该刚刚恢复。
我们已经证实,在智能手机上访问nonhttps.com。你应该看到我们的DNS服务器日志,它已经欺骗了DNS响应,并返回了笔记本电脑的本地IP地址。

然后,你的智能手机应尝试将其对nonhttps.com的HTTP请求发送到便携式计算机,而不是真正的nonhttps.com服务器。虽然,页面应该无法加载,但已经是个明显的进步了。
通过使用Wireshark,我们确认这确实是刚刚发生的事情。使用数据包筛选器tcp端口80 && dst $ YOUR_LAPTOPS_LOCAL_IP运行Wireshark,在智能手机上重新加载nonhttps.com,然后回头看Wireshark。你应该会看到智能手机尝试通过端口80上的TCP连接到笔记本电脑。TCP连接的“目标IP”应设置为笔记本电脑的本地IP,其“源IP”应设置为智能手机的IP。这证明我们已成功说服你的智能手机将其对nonhttps.com的TCP请求发送到你的笔记本电脑!

代码解析
现在,我们的DNS服务器正在工作,让我们仔细看看它的代码,你可能会发现在GitHub中打开代码很有用。
我们的服务器会监视所有通过笔记本电脑wi-fi接口的数据包,并对那些看起来像DNS请求的数据包运行一个回调函数。回调函数构建一个DNS响应,并将其发送回你的智能手机。
上一页 [1] [2] [3] [4] 下一页
下一篇:返回列表