Example #1
0
 def run(self):
     self.timeout = int(self.config_ini['Timeout'])
     for _port in self.port_list:
         self.server = ''
         self.banner = ''
         self.port = int(_port)
         self.scan_port()  # 端口扫描
         if not self.banner:
             continue
         self.server_discern()  # 服务识别
         if self.server == '':
             web_info = self.try_web()  # 尝试web访问
             if web_info:
                 log.write('web', self.ip, self.port, web_info)
                 logger.info("%s:%s is web", self.ip, self.port)
                 logger.info("%s:%s web info %s", self.ip, self.port,
                             web_info)
                 time_ = datetime.datetime.now()
                 mongo.NA_INFO.update({
                     'ip': self.ip,
                     'port': self.port
                 }, {
                     "$set": {
                         'banner': self.banner,
                         'server': 'web',
                         'webinfo': web_info,
                         'time': time_
                     }
                 })
Example #2
0
def cruise(STATISTICS, MASSCAN_AC):
    while True:
        now_str = datetime.datetime.now()
        week = int(now_str.weekday())
        hour = int(now_str.hour)
        if week >= 1 and week <= 5 and hour >= 9 and hour <= 18:  # 非工作时间不删除
            try:
                data = mongo.NA_INFO.find().sort("time", 1)
                for history_info in data:
                    while True:
                        if MASSCAN_AC[0]:  # 如果masscan正在扫描即不进行清理
                            time.sleep(10)
                        else:
                            break
                    ip = history_info['ip']
                    port = history_info['port']
                    try:
                        sock = socket.socket(socket.AF_INET,
                                             socket.SOCK_STREAM)
                        sock.connect((ip, int(port)))
                        sock.close()
                    except Exception, e:
                        time_ = datetime.datetime.now()
                        date_ = time_.strftime('%Y-%m-%d')
                        mongo.NA_INFO.remove({"ip": ip, "port": port})
                        logger.info('%s:%s delete', ip, port)
                        STATISTICS[date_]['delete'] += 1
                        del history_info["_id"]
                        history_info['del_time'] = time_
                        history_info['type'] = 'delete'
                        mongo.NA_HISTORY.insert(history_info)
            except:
                pass
        time.sleep(3600)
Example #3
0
def monitor(CONFIG_INI, STATISTICS, NACHANGE):
    while True:
        try:
            time_ = datetime.datetime.now()
            date_ = time_.strftime('%Y-%m-%d')
            mongo.na_db.Heartbeat.update({"name": "heartbeat"},
                                         {"$set": {
                                             "up_time": time_
                                         }})
            if date_ not in STATISTICS:
                STATISTICS[date_] = {"add": 0, "update": 0, "delete": 0}
            mongo.na_db.Statistics.update(
                {"date": date_}, {"$set": {
                    "info": STATISTICS[date_]
                }},
                upsert=True)
            new_config = get_config()
            if base64.b64encode(CONFIG_INI["Scan_list"]) != base64.b64encode(
                    new_config["Scan_list"]):
                NACHANGE[0] = 1
                logger.info('Scan List Changed!')
            CONFIG_INI.clear()
            CONFIG_INI.update(new_config)
        except Exception, e:
            logger.error(e)
        time.sleep(30)
Example #4
0
 def server_discern(self):
     for mark_info in self.config_ini['Discern_server']:  # 快速识别
         try:
             name, default_port, mode, reg = mark_info
             if mode == 'default':
                 if int(default_port) == self.port:
                     self.server = name
             elif mode == 'banner':
                 matchObj = re.search(reg, self.banner, re.I | re.M)
                 if matchObj:
                     self.server = name
             if self.server:
                 break
         except:
             continue
     if not self.server and self.port not in [80, 443, 8080]:
         for mark_info in self.config_ini['Discern_server']:  # 发包识别
             try:
                 name, default_port, mode, reg = mark_info
                 if mode not in ['default', 'banner']:
                     dis_sock = socket.socket(socket.AF_INET,
                                              socket.SOCK_STREAM)
                     dis_sock.connect((self.ip, self.port))
                     mode = mode.decode('string_escape')
                     reg = reg.decode('string_escape')
                     dis_sock.send(mode)
                     time.sleep(0.3)
                     dis_recv = dis_sock.recv(1024)
                     dis_sock.close()
                     matchObj = re.search(reg, dis_recv, re.I | re.M)
                     if matchObj:
                         self.server = name
                         break
             except:
                 pass
     if self.server:
         logger.info("%s:%s is %s", self.ip, self.port, str(self.server))
         mongo.NA_INFO.update({
             "ip": self.ip,
             "port": self.port
         }, {"$set": {
             "server": self.server
         }})
Example #5
0
 def mPing(self, ipPool):
     Sock = self.__icmpSocket
     Sock.settimeout(self.timeout)
     packet = self.__icmpPacket
     recvFroms = set()
     sendThr = SendPingThr(ipPool, packet, Sock, self.timeout)
     sendThr.start()
     while True:
         try:
             ac_ip = Sock.recvfrom(1024)[1][0]
             if ac_ip not in recvFroms:
                 logger.info("%s active", ac_ip)
                 recvFroms.add(ac_ip)
         except Exception:
             pass
         finally:
             if not sendThr.isAlive():
                 break
     return recvFroms & ipPool
Example #6
0
 def scan_port(self):
     try:
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         sock.connect((self.ip, self.port))
         time.sleep(0.2)
     except Exception, e:
         return
     try:
         self.banner = sock.recv(1024)
         sock.close()
         if len(self.banner) <= 2:
             self.banner = 'NULL'
     except Exception, e:
         self.banner = 'NULL'
     logger.info("%s:%s is open", self.ip, self.port)
     banner = ''
     hostname = self.ip2hostname(self.ip)
     time_ = datetime.datetime.now()
     date_ = time_.strftime('%Y-%m-%d')
     try:
         banner = unicode(self.banner, errors='replace')
         if self.banner == 'NULL':
             banner = ''
         mongo.NA_INFO.insert({
             "ip": self.ip,
             "port": self.port,
             "hostname": hostname,
             "banner": banner,
             "time": time_
         })