#Fast filter lists. (0.05 seconds by server). # Chargen, NTP, Quake, SSDP, SNMP, DNS, LDAP, MDNS, TFTP, PortMap, Netbios supported. # Anti-Duplication feature. # Filter bytes response. # Custom output syntax support. # Lightweight. #Installation #wget -O filter.py https://raw.githubusercontent.com/Alemalakra/EasyFilter/master/filter.py && chmod 777 filter.py #Usage #[!] EasyFilter 1.0 by Alemalakra. #[!] Usage: filter.py #[!] Protocols: chargen, ntp, quake, ssdp, ldap, dns, snmp, mdns, tftp, portmap, netbios #[!] Output syntax variables: [space], [ip], [bytes] #Sample Usage #python filter.py ntp_old.txt ntp_filtred.txt ntp 42 [ip][space][bytes] #Requeriments # Python 2.* #Server offshore (BulletProof, Recommended) #!usr/bin/python # -*- coding: utf-8 -*- import socket import sys if len(sys.argv) < 2: print '[!] EasyFilter 1.0 by Alemalakra.' print '[!] Usage: filter.py ' print '[!] Protocols: chargen, ntp, quake, ssdp, ldap, dns, snmp, mdns, tftp, portmap, netbios' print '[!] Output syntax variables: [space], [ip], [bytes]' sys.exit() s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.settimeout(0.05) # Fast list/scan of course. # PayLoads. chargen = 'A'#lemalakra ntp = '\x17\x00\x03\x2a\x00\x00\x00\x00' quake = '\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x10' ssdp = "\x4d\x2d\x53\x45\x41\x52\x43\x48\x20\x2a\x20\x48\x54\x54\x50\x2f\x31\x2e\x31\x0D​\x0A\x48\x6f\x73\x74\x3a\x32\x33\x39\x2e\x32\x35\x35\x2e\x32\x35\x35\x2e\x32\x35​\x30\x3a\x31\x39\x30\x30\x0D\x0A\x53\x54\x3a\x73\x73\x64\x70\x3a\x61\x6c\x6c\x0D​\x0A\x4d\x61\x6e\x3a\x22\x73\x73\x64\x70\x3a\x64\x69\x73\x63\x6f\x76\x65\x72\x22​\x0D\x0A\x4d\x58\x3a\x33\x0D\x0A\x0D\x0A" snmp = '\x30\x37\x02\x01\x01\x04\x06\x70\x75\x62\x6c\x69\x63\xa5\x2a\x02\x04\x06\x29\x07\x31\x02\x01\x00\x02\x01\x0a\x30\x1c\x30\x0b\x06\x07\x2b\x06\x01\x02\x01\x01\x01\x05\x00\x30\x0d\x06\x09\x2b\x06\x01\x02\x01\x01\x09\x01\x03\x05\x00' dns = '\xc4\x75\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\xff\x00\x01\x00\x00\x29\x23\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ldap = '\x30\x84\x00\x00\x00\x2d\x02\x01\x01\x63\x84\x00\x00\x00\x24\x04\x00\x0a\x01\x00\x0a\x01\x00\x02\x01\x00\x02\x01\x00\x01\x01\x00\x87\x0b\x6f\x62\x6a\x65\x63\x74\x63\x6c\x61\x73\x73\x30\x84\x00\x00\x00\x00\x00' mdns = '\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x09\x5F\x73\x65\x72\x76\x69\x63​\x65\x73\x07\x5F\x64\x6E\x73\x2D\x73\x64\x04\x5F\x75\x64\x70\x05\x6C\x6F\x63\x61​\x6C\x00\x00\x0C\x00\x01' tftp = '\x00\x01\x2f\x78\x00\x6e\x65\x74\x61\x73\x63\x69\x69\x00' portmap = '\x65\x72\x0A\x37\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x86\xA0\x00\x00\x00\x02​\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00​' netbios = '\xE5\xD8\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x43\x4B\x41\x41\x41\x41\x41​\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41​\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01' file1 = sys.argv[1] #Input file2 = sys.argv[2] #Output proto = sys.argv[3] size = int(sys.argv[4]) syntax = sys.argv[5] with open(file1) as f: list = f.read().splitlines() newfile = open(file2, 'w') if proto == 'tftp': port = 69 payload = tftp elif proto == 'portmap': port = 111 payload = portmap elif proto == 'netbios': port = 137 payload = netbios elif proto == 'ntp': port = 123 payload = ntp elif proto == 'mdns': port = 5353 payload = mdns elif proto == 'chargen': port = 19 payload = chargen elif proto == 'snmp': port = 161 payload = snmp elif proto == 'dns': port = 53 payload = dns elif proto == 'quake': port = 27960 payload = quake elif proto == 'ssdp': port = 1900 payload = ssdp elif proto == 'ldap': port = 389 payload = ldap else: print '[!] Protocol is not available' sys.exit() # Start Loop c = 0 servers = [] while c < len(list): split = list[c].split(" ") # Bytes ones, and non bytes ones s.sendto(payload, (split[0], port)) try: data, addr = s.recvfrom(65500) syntax_output = "" if len(data) >= size: if any(addr[0] in s for s in servers): # Already Exists rip = 0 else: # Add so. print '[!] Recived Working Server: %s Recived Bytes: %i' % ( addr[0],len(data) ) syntax_output = syntax.replace("[space]", " ", 5) # 5 is fine. syntax_output = syntax_output.replace("[bytes]", str(len(data)), 5) # 5 is fine. syntax_output = syntax_output.replace("[ip]", str(addr[0]), 5) # 5 is fine. newfile.write(str(syntax_output)+'\n') servers.append(addr[0]) except Exception and socket.error and socket.timeout: I = 0 c += 1 newfile.close() with open(file2) as e: count = e.read().splitlines() print '[!] Finished Filter saved to %s with %i working servers.' % ( file2,len(count) )