设为首页 加入收藏

TOP

Python编写类似nmap的扫描工具(四)
2017-10-10 21:05:51 】 浏览:2475
Tags:Python 编写 类似 nmap 扫描工具
p;     if ans[ICMP].type == 0: #ICMP type为0表示是ICMP echo-reply
                print '[+]IP:主机%s echo-reply.' % dst


    tcp_info = {}
    def tcp_scan(self,dst,port):
        #TCP SYN,发送TCP SYN包,有响应表示端口开放
        ans,unans = sr(IP(dst=dst)/TCP(sport=RandShort(),dport=port,flags='S'),
                      timeout=self.timeout,retry=self.retry,verbose=False)
        if ans.res:
            if ans.res[0][0][IP].dst not in Discovery_Scan.tcp_info:
                Discovery_Scan.tcp_info[ans.res[0][0][IP].dst] = True


    udp_info = {}
    def udp_scan(self,dst,port):
        #UDP,发送UDP包,有响应表示端口开放
        ans,uans = sr(IP(dst=dst)/UDP(sport=RandShort(),dport=port),
                      timeout=self.timeout,retry=self.retry,verbose=False)
        if ans.res:
            if ans.res[0][0][IP].dst not in Discovery_Scan.udp_info:
                Discovery_Scan.udp_info[ans.res[0][0][IP].dst] = True


class Port_Scan(object):
    '''
    说明:用于进行端口扫描,判断端口是否开放
    '''
    def __init__(self,args,timeout=0.5,retry=0):
        self.targets = parse_target(args)
        self.timeout = timeout
        self.retry = retry


    syn_port_dict = {}
    def syn_port_scan(self,dst,port):
        #TCP SYN端口扫描,若SYN包返回携带SYN??ACK(即TCP.flags=18)标志的包,则表明此端口打开。
        ans,uans = sr(IP(dst=dst)/TCP(sport=RandShort(),dport=port,flags='S'),
                      timeout=self.timeout,retry=self.retry,verbose=False)
        if ans:
            first_respons_pkt = ans.res[0][1]
            if first_respons_pkt[TCP] and first_respons_pkt[TCP].flags == 18:
                if first_respons_pkt[IP].src not in Port_Scan.syn_port_dict:
                    Port_Scan.syn_port_dict[first_respons_pkt[IP].src] = [first_respons_pkt[TCP].sport]
                else:
                    Port_Scan.syn_port_dict[first_respons_pkt[IP].src].append(first_respons_pkt[TCP].sport)


    udp_port_dict = {}
    def udp_port_scan(self,dst,port):
        #UDP端口扫描,若UDP端口返回ICMP port-unreachable,则表示端口打开。(排除某些主机对任何UDP端口的探测都响应为ICMP port-unrechable)
        ans,uans = sr(IP(dst=dst)/UDP(sport=RandShort(),dport=port),
                      timeout=self.timeout, retry=self.retry, verbose=False)
        if ans.res and ans.res[0][1].haslayer(UDPerror):
            first_respons_p

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python3 基本数据类型 下一篇Python3基本语法简述

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目