Addd subprocess timeout into Pholus + cleanup

This commit is contained in:
Jokob-sk
2023-01-26 23:44:54 +11:00
parent 14cb0f46f3
commit 43c2084e15
2 changed files with 79 additions and 56 deletions

View File

@@ -1664,6 +1664,7 @@ def performPholusScan (timeoutSec):
# the scan always lasts 2x as long, so the desired user time from settings needs to be halved # the scan always lasts 2x as long, so the desired user time from settings needs to be halved
adjustedTimeout = str(round(int(timeoutSec) / 2, 0)) adjustedTimeout = str(round(int(timeoutSec) / 2, 0))
# python3 -m trace --trace /home/pi/pialert/pholus/pholus3.py eth1 -rdns_scanning 192.168.1.0/24 -stimeout 600
pholus_args = ['python3', '/home/pi/pialert/pholus/pholus3.py', interface, "-rdns_scanning", mask, "-stimeout", adjustedTimeout] pholus_args = ['python3', '/home/pi/pialert/pholus/pholus3.py', interface, "-rdns_scanning", mask, "-stimeout", adjustedTimeout]
# Execute command # Execute command

View File

@@ -21,6 +21,8 @@ logging.getLogger("scapy.runtime").setLevel(logging.ERROR)#supress Scapy warning
runPath = os.path.dirname(os.path.abspath(__file__)) runPath = os.path.dirname(os.path.abspath(__file__))
runPathTmp = runPath + "/.." runPathTmp = runPath + "/.."
logPath = runPathTmp + '/front/log' logPath = runPathTmp + '/front/log'
# DEBUG
isDebug = False
#=============================================================================== #===============================================================================
@@ -61,6 +63,8 @@ write_file(logPath + "/pialert_pholus_subp_pr.log", "")
# For separate logging of the multiprocess subprocess # For separate logging of the multiprocess subprocess
def file_print_pr(*args): def file_print_pr(*args):
if isDebug == False:
return
result = '' result = ''
@@ -139,10 +143,10 @@ def get_my_ipv4_addr(interface):
########################## ##########################
class Sniffer(): class Sniffer():
def __init__ (self,filter,interface,sniffer_timeout,queue,dns,show_ttl,dos_ttl, conflict, ttl,d4, d6, target_mac, auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,hlimit,workstation,printer,googlecast,airtv,flood,flooding_timeout,flooding_interval, v4, v6): def __init__ (self,filter,interface,sniffer_timeout,queue,dns,show_ttl,dos_ttl, conflict, ttl,d4, d6, target_mac, auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,hlimit,workstation,printer,googlecast,airtv,flood,flooding_timeout,flooding_interval, v4, v6):
file_print(">>>>>>> sniffer_args: ", filter," ",interface," ",sniffer_timeout," ",queue," ",dns," ",show_ttl," ",dos_ttl," ", conflict," ", ttl," ",d4," ", d6," ", target_mac," ", auto_fake_responses," ",source_IPv6," ", source_IPv4," ", target_mac1," ", target_mac2," ",source_mac," ",hlimit," ",workstation," ",printer," ",googlecast," ",airtv," ",flood," ",flooding_timeout," ",flooding_interval," ", v4," ", v6) file_print_pr("[DEBUG] sniffer_args: ", filter," ",interface," ",sniffer_timeout," ",queue," ",dns," ",show_ttl," ",dos_ttl," ", conflict," ", ttl," ",d4," ", d6," ", target_mac," ", auto_fake_responses," ",source_IPv6," ", source_IPv4," ", target_mac1," ", target_mac2," ",source_mac," ",hlimit," ",workstation," ",printer," ",googlecast," ",airtv," ",flood," ",flooding_timeout," ",flooding_interval," ", v4," ", v6)
self.filter = filter self.filter = filter
self.interface = interface self.interface = interface
file_print(">>>>>>> sniffer_timeout: ", sniffer_timeout) file_print_pr("[DEBUG] sniffer_timeout: ", sniffer_timeout)
self.sniffer_timeout=sniffer_timeout self.sniffer_timeout=sniffer_timeout
self.queue=queue self.queue=queue
self.dns=dns self.dns=dns
@@ -178,7 +182,7 @@ class Sniffer():
################################## ##################################
class Sniffer_Offline(): class Sniffer_Offline():
def __init__ (self,interface,queue,show_ttl,d4, d6, target_mac,auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,hlimit): def __init__ (self,interface,queue,show_ttl,d4, d6, target_mac,auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,hlimit):
file_print(">>>>>>> Timestamp 0.0210aa: ", timeNow()) file_print_pr("[DEBUG] Timestamp 1: ", timeNow())
self.interface = interface self.interface = interface
self.queue=queue self.queue=queue
self.show_ttl=show_ttl self.show_ttl=show_ttl
@@ -201,9 +205,8 @@ class Sniffer_Offline():
######################################################################## ########################################################################
def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,interface,d4,d6,target_mac,auto_fake_responses,source_IPv6,source_IPv4,target_mac1,target_mac2,source_mac,hlimit,workstation,printer,googlecast,airtv,flood,flooding_timeout,flodding_interval,v4,v6): def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,interface,d4,d6,target_mac,auto_fake_responses,source_IPv6,source_IPv4,target_mac1,target_mac2,source_mac,hlimit,workstation,printer,googlecast,airtv,flood,flooding_timeout,flodding_interval,v4,v6):
# file_print(">>>>>>> Timestamp 0.0210: ", timeNow()) file_print_pr("[DEBUG] Timestamp 2: ", timeNow())
file_print_pr(">>>>>>> Timestamp 0.0210: ", timeNow()) file_print_pr("[DEBUG] 3 ")
file_print_pr(">>>>>>> Test ")
dns_type = {12: "PTR", 28: "AAAA", 13: "HINFO",33: "SRV", 1: "A", 255: "* (ANY)", 16: "TXT", 15: "MX", 6: "SOA", 256: "URI", 5: "CNAME",39: "DNAME"} dns_type = {12: "PTR", 28: "AAAA", 13: "HINFO",33: "SRV", 1: "A", 255: "* (ANY)", 16: "TXT", 15: "MX", 6: "SOA", 256: "URI", 5: "CNAME",39: "DNAME"}
Ether_src=packets.getlayer(Ether).src Ether_src=packets.getlayer(Ether).src
@@ -213,12 +216,11 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
elif packets.haslayer(IP): elif packets.haslayer(IP):
IP_src=packets.getlayer(IP).src IP_src=packets.getlayer(IP).src
else: else:
file_print(">>>>>>> Timestamp 0.021: ", timeNow()) file_print_pr("[DEBUG] Timestamp 4: ", timeNow())
file_print_pr(">>>>>>> Test 2")
res0= Ether_src + " | " + IP_src.ljust(27) res0= Ether_src + " | " + IP_src.ljust(27)
if packets.haslayer(DNS): if packets.haslayer(DNS):
file_print_pr(">>>>>>> Test 4") file_print_pr("[DEBUG] Timestamp 5: ", timeNow())
dns=packets.getlayer(DNS) dns=packets.getlayer(DNS)
if (conflict or dos_ttl) and dns.ancount>0: if (conflict or dos_ttl) and dns.ancount>0:
DNSBlocks = [ ] DNSBlocks = [ ]
@@ -274,13 +276,13 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
else: else:
new_packet=new_packet/UDP(dport=5353,sport=5353)/new_DNS_packet new_packet=new_packet/UDP(dport=5353,sport=5353)/new_DNS_packet
for x in range(0,2):#Send each packet twice for x in range(0,2):#Send each packet twice
file_print_pr(">>>>>>> Test 6") file_print_pr("[DEBUG] Timestamp 6: ", timeNow())
sendp(new_packet,iface=interface) sendp(new_packet,iface=interface)
file_print_pr(">>>>>>> Test 6.1") file_print_pr("[DEBUG] Timestamp 7: ", timeNow())
elif auto_fake_responses or (not (dos_ttl or conflict)): elif auto_fake_responses or (not (dos_ttl or conflict)):
## IF THIS IS A QUERY ## ## IF THIS IS A QUERY ##
file_print_pr(">>>>>>> Test 6.2") file_print_pr("[DEBUG] Timestamp 8: ", timeNow())
if dns.opcode==0: if dns.opcode==0:
res0 = res0 + "" res0 = res0 + ""
if dns.qdcount>0: if dns.qdcount>0:
@@ -488,9 +490,9 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0,ancount=1)/DNSRR(rrname=qname,ttl=myttl,rdata=source_IPv4,type="A") dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0,ancount=1)/DNSRR(rrname=qname,ttl=myttl,rdata=source_IPv4,type="A")
else: else:
dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0,ancount=1)/DNSRR(rrname=qname,ttl=myttl,rdata=source_IPv4,type="A") dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0,ancount=1)/DNSRR(rrname=qname,ttl=myttl,rdata=source_IPv4,type="A")
file_print_pr(">>>>>>> Test 6.23") file_print_pr("[DEBUG] Timestamp 9: ", timeNow())
send_packets(v4,v6,source_mac,target_mac1,target_mac2,source_IPv4,d4,source_IPv6,d6,interface,hlimit,dns_packet,False,10.0,0.1)#CHANGE DEFAULT VALUES send_packets(v4,v6,source_mac,target_mac1,target_mac2,source_IPv4,d4,source_IPv6,d6,interface,hlimit,dns_packet,False,10.0,0.1)#CHANGE DEFAULT VALUES
file_print_pr(">>>>>>> Test 6.24") file_print_pr("[DEBUG] Timestamp 10: ", timeNow())
### END "IF WE NEED TO AUTO RESPOND WITH A FAKE RESPONSE ### END "IF WE NEED TO AUTO RESPOND WITH A FAKE RESPONSE
### NEXT LINES ARE ONLY USED TO PRINT RESULTS ### ### NEXT LINES ARE ONLY USED TO PRINT RESULTS ###
if dnsqr.qclass==32769: if dnsqr.qclass==32769:
@@ -526,7 +528,7 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
else: else:
ARtype=str(dnsrropt.type) ARtype=str(dnsrropt.type)
res = res0 + " | Additional_Record | " + rrname.decode("utf-8") + " " + ARtype res = res0 + " | Additional_Record | " + rrname.decode("utf-8") + " " + ARtype
file_print_pr(">>>>>>> Test 6.24") file_print_pr("[DEBUG] Timestamp 11: ", timeNow())
if dnsrropt.haslayer(EDNS0TLV): if dnsrropt.haslayer(EDNS0TLV):
edns0tlv=dnsrropt.getlayer(EDNS0TLV) edns0tlv=dnsrropt.getlayer(EDNS0TLV)
if edns0tlv.optcode==4: if edns0tlv.optcode==4:
@@ -595,26 +597,27 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
str_type = str(b_to_str(dns_type[dnsrr.type])) + "" str_type = str(b_to_str(dns_type[dnsrr.type])) + ""
str_rdata = str(b_to_str(dnsrr.rdata)) + "" str_rdata = str(b_to_str(dnsrr.rdata)) + ""
str_rclass = str(b_to_str(dnsrr.rclass)) + "" str_rclass = str(b_to_str(dnsrr.rclass)) + ""
file_print_pr("[DEBUG] Timestamp 12: ", timeNow())
res = str_res0 + " | Additional_Record | "+str_rrname + " " + str_type+" " + str_rclass + ' "' +str_rdata+'"' res = str_res0 + " | Additional_Record | "+str_rrname + " " + str_type+" " + str_rclass + ' "' +str_rdata+'"'
if show_ttl: if show_ttl:
res = res + " TTL:"+str(dnsrr.ttl) res = res + " TTL:"+str(dnsrr.ttl)
if print_res==1: if print_res==1:
file_print(res) file_print(res)
file_print_pr(">>>>>>> Test 6.27") file_print_pr("[DEBUG] Timestamp 13: ", timeNow())
queue.put(res) queue.put(res)
block = block.payload block = block.payload
file_print_pr(">>>>>>> Test 6.270") file_print_pr("[DEBUG] Timestamp 14: ", timeNow())
if dns.ancount>0: if dns.ancount>0:
DNSBlocks = [ ] DNSBlocks = [ ]
DNSBlocks.append(dns.an) DNSBlocks.append(dns.an)
for block in DNSBlocks: for block in DNSBlocks:
file_print_pr(">>>>>>> Test 6.271") file_print_pr("[DEBUG] Timestamp 15: ", timeNow())
while isinstance(block,DNSRR): while isinstance(block,DNSRR):
dnsrr=block.getlayer(DNSRR) dnsrr=block.getlayer(DNSRR)
if dnsrr.rclass==1: if dnsrr.rclass==1:
rclass="Class:IN" rclass="Class:IN"
file_print_pr("[DEBUG] Timestamp 16: ", timeNow())
else: else:
rclass="Class:"+str(dnsrr.rclass) rclass="Class:"+str(dnsrr.rclass)
rdata=dnsrr.rdata rdata=dnsrr.rdata
@@ -632,24 +635,28 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
if isinstance(rdata,list): if isinstance(rdata,list):
rdata = b" ".join(rdata).decode("utf-8") rdata = b" ".join(rdata).decode("utf-8")
res = res0 + " | Answer | "+dnsrr.rrname.decode("utf-8") + " " + dns_type[dnsrr.type]+" " + rclass + ' "' +rdata+'"' res = res0 + " | Answer | "+dnsrr.rrname.decode("utf-8") + " " + dns_type[dnsrr.type]+" " + rclass + ' "' +rdata+'"'
file_print_pr(">>>>>>> Test 6.272004") file_print_pr("[DEBUG] Timestamp 17: ", timeNow())
file_print_pr("[DEBUG] Timestamp 18: ", timeNow())
if show_ttl: if show_ttl:
res = res + " TTL:"+str(dnsrr.ttl) res = res + " TTL:"+str(dnsrr.ttl)
if print_res==1: if print_res==1:
file_print(res) file_print(res)
file_print_pr("[DEBUG] Timestamp 19: ", timeNow())
queue.put(res) queue.put(res)
block = block.payload block = block.payload
file_print_pr(">>>>>>> Test 6.272") file_print_pr("[DEBUG] Timestamp 20: ", timeNow())
if dns.nscount>0: if dns.nscount>0: #MAYBE HERE
file_print_pr(">>>>>>> Test 6.273") file_print_pr("[DEBUG] Timestamp 21: ", timeNow())
DNSBlocks = [ ] DNSBlocks = [ ]
DNSBlocks.append(dns.ns) DNSBlocks.append(dns.ns)
file_print_pr("[DEBUG] Timestamp 22: ", timeNow())
for block in DNSBlocks: for block in DNSBlocks:
file_print_pr(">>>>>>> Test 6.28") file_print_pr("[DEBUG] Timestamp 23: ", timeNow())
while isinstance(block,DNSRR): while isinstance(block,DNSRR):
dnsrr=block.getlayer(DNSRR) dnsrr=block.getlayer(DNSRR)
if dnsrr.rclass==1: if dnsrr.rclass==1:
rclass="Class:IN" rclass="Class:IN"
file_print_pr("[DEBUG] Timestamp 24: ", timeNow())
else: else:
rclass="Class:"+str(dnsrr.rclass) rclass="Class:"+str(dnsrr.rclass)
@@ -664,20 +671,22 @@ def ext_handler(packets,queue,unidns,show_ttl,print_res,dos_ttl,conflict,ttl,int
res = res + " TTL:"+str(dnsrr.ttl) res = res + " TTL:"+str(dnsrr.ttl)
if print_res==1: if print_res==1:
file_print(res) file_print(res)
file_print_pr(">>>>>>> Test 6.274") file_print_pr("[DEBUG] Timestamp 25: ", timeNow())
queue.put(res) queue.put(res)
block = block.payload block = block.payload
file_print_pr("[DEBUG] Timestamp 26: ", timeNow())
else: else:
file_print_pr(">>>>>>> Test 6.27200") file_print_pr("[DEBUG] Timestamp 27: ", timeNow())
else: else:
file_print("not a DNS Query", dns.summary()) file_print_pr("[DEBUG] Timestamp 28: ", timeNow())
file_print_pr(">>>>>>> Test 6.272001")
else: else:
file_print_pr(">>>>>>> Test 6.2720055") file_print_pr("[DEBUG] Timestamp 29: ", timeNow())
else: else:
file_print_pr(">>>>>>> Test 3") file_print_pr("[DEBUG] Timestamp 30: ", timeNow())
file_print_pr(">>>>>>> Test 6.272005599") file_print_pr("[DEBUG] Timestamp 31: ", timeNow())
file_print_pr("[DEBUG] Timestamp 32: ", timeNow(), " ", res0)
file_print_pr("[DEBUG] Timestamp 33: ", timeNow(), " ", res)
######################################## ########################################
@@ -852,11 +861,11 @@ def main():
exit(0) exit(0)
file_print("Press Ctrl-C to exit and print the results") file_print("Press Ctrl-C to exit and print the results")
q = multiprocessing.Queue() q = multiprocessing.Queue()
file_print(">>>>>>> Timestamp 0.1: ", timeNow()) file_print_pr("[DEBUG] Timestamp 34: ", timeNow())
pr = multiprocessing.Process(target=Sniffer_Offline, args=(values.interface,q,values.show_ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,values.source6,values.source4,values.target_mac,values.target_mac,values.source_mac,values.hlimit)) pr = multiprocessing.Process(target=Sniffer_Offline, args=(values.interface,q,values.show_ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,values.source6,values.source4,values.target_mac,values.target_mac,values.source_mac,values.hlimit))
pr.start() pr.start()
pr.join() pr.join()
file_print(">>>>>>> Timestamp 0.2: ", timeNow()) file_print_pr("[DEBUG] Timestamp 35: ", timeNow())
results=[] results=[]
while not q.empty(): while not q.empty():
results.append(q.get()) results.append(q.get())
@@ -928,9 +937,9 @@ def main():
file_print("I will sniff for ",values.sniffer_timeout," seconds, unless interrupted by Ctrl-C") file_print("I will sniff for ",values.sniffer_timeout," seconds, unless interrupted by Ctrl-C")
file_print("Press Ctrl-C to exit") file_print("Press Ctrl-C to exit")
try: try:
file_print(">>>>>>> Timestamp 0.0210ab: ", timeNow()) file_print_pr("[DEBUG] Timestamp 36: ", timeNow())
Sniffer(myfilter, values.interface, float(values.sniffer_timeout),q,values.dns,values.show_ttl, values.dos_ttl, values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6) Sniffer(myfilter, values.interface, float(values.sniffer_timeout),q,values.dns,values.show_ttl, values.dos_ttl, values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6)
file_print(">>>>>>> Timestamp 0.0210abc: ", timeNow()) file_print_pr("[DEBUG] Timestamp 37: ", timeNow())
except KeyboardInterrupt: except KeyboardInterrupt:
file_print("Exiting on user's request 1") file_print("Exiting on user's request 1")
exit(0) exit(0)
@@ -940,25 +949,25 @@ def main():
file_print("I will sniff for ",values.sniffer_timeout," seconds, unless interrupted by Ctrl-C") file_print("I will sniff for ",values.sniffer_timeout," seconds, unless interrupted by Ctrl-C")
pr = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q,values.dns,values.show_ttl, values.dos_ttl, values.conflict, values.ttl,values.d4,values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2, source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6)) pr = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q,values.dns,values.show_ttl, values.dos_ttl, values.conflict, values.ttl,values.d4,values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2, source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6))
pr.daemon = True pr.daemon = True
file_print(">>>>>>> Timestamp 0.01: ", timeNow()) file_print_pr("[DEBUG] Timestamp 38: ", timeNow())
pr.start() pr.start()
file_print(">>>>>>> Timestamp 0.02: ", timeNow()) file_print_pr("[DEBUG] Timestamp 39: ", timeNow())
file_print("------------------------------------------------------------------------") file_print("------------------------------------------------------------------------")
time.sleep(1)#to make sure than sniffer has started before we proceed, otherwise you may miss some traffic time.sleep(1)#to make sure than sniffer has started before we proceed, otherwise you may miss some traffic
file_print(">>>>>>> Timestamp 0.03: ", timeNow()) file_print_pr("[DEBUG] Timestamp 40: ", timeNow())
########################################################################################################## ##########################################################################################################
if values.request: if values.request:
file_print(">>>>>>> Timestamp 1: ", timeNow()) file_print_pr("[DEBUG] Timestamp 41: ", timeNow())
requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,values.query,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout) requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,values.query,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout)
file_print(">>>>>>> Timestamp 2: ", timeNow()) file_print_pr("[DEBUG] Timestamp 42: ", timeNow())
elif values.response: elif values.response:
#qr=1=>Response, aa=1=>Server is an authority for the domain, rd=0=> Do not query recursively #qr=1=>Response, aa=1=>Server is an authority for the domain, rd=0=> Do not query recursively
file_print(">>>>>>> Timestamp 3: ", timeNow()) file_print_pr("[DEBUG] Timestamp 43: ", timeNow())
if values.dns: if values.dns:
dns_packet=UDP(dport=53)/DNS(qr=1,aa=1,rd=0) dns_packet=UDP(dport=53)/DNS(qr=1,aa=1,rd=0)
else: else:
dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0) dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=1,aa=1,rd=0)
file_print(">>>>>>> Timestamp 4: ", timeNow()) file_print_pr("[DEBUG] Timestamp 44: ", timeNow())
responses = values.dns_response.split(",") responses = values.dns_response.split(",")
no_of_answers=0 no_of_answers=0
no_of_additional_records=0 no_of_additional_records=0
@@ -1046,7 +1055,7 @@ def main():
dns_packet[DNS].arcount=no_of_additional_records dns_packet[DNS].arcount=no_of_additional_records
send_packets(values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,values.d4,source_IPv6,values.d6,values.interface,values.hlimit,dns_packet,values.flood,values.flooding_timeout,values.flooding_interval) send_packets(values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,values.d4,source_IPv6,values.d6,values.interface,values.hlimit,dns_packet,values.flood,values.flooding_timeout,values.flooding_interval)
elif values.rdns_scanning: elif values.rdns_scanning:
file_print(">>>>>>> Timestamp 5: ", timeNow()) file_print_pr("[DEBUG] Timestamp 45: ", timeNow())
dns_query=None dns_query=None
ipn = ipaddress.ip_network(values.rdns_scanning) ipn = ipaddress.ip_network(values.rdns_scanning)
for ip in ipn.hosts(): for ip in ipn.hosts():
@@ -1060,22 +1069,28 @@ def main():
else: else:
dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=0,qd=dns_query) dns_packet=UDP(sport=5353,dport=5353)/DNS(qr=0,qd=dns_query)
send_packets(values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,values.d4,source_IPv6,values.d6,values.interface,values.hlimit,dns_packet,values.flood,values.flooding_timeout,values.flooding_interval) send_packets(values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,values.d4,source_IPv6,values.d6,values.interface,values.hlimit,dns_packet,values.flood,values.flooding_timeout,values.flooding_interval)
file_print(">>>>>>> Timestamp 6: ", timeNow()) file_print_pr("[DEBUG] Timestamp 46: ", timeNow())
elif values.service_scan: elif values.service_scan:
file_print(">>>>>>> Timestamp 7: ", timeNow()) file_print_pr("[DEBUG] Timestamp 47: ", timeNow())
requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,values.query,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout) requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,values.query,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout)
file_print(">>>>>>> Timestamp 8: ", timeNow()) file_print_pr("[DEBUG] Timestamp 48: ", timeNow())
############################################################################################ ############################################################################################
############################################################################################ ############################################################################################
if pr: if pr:
file_print_pr("[DEBUG] Timestamp 49: ", timeNow())
try: try:
file_print(">>>>>>> Timestamp 6.1000: ", timeNow()) file_print_pr("[DEBUG] Timestamp 50: ", timeNow()) #HERE STUCK
pr.join() pr.join(20)
file_print(">>>>>>> Timestamp 6.2: ", timeNow()) if pr.is_alive():
file_print("SUB-PROCESS KILLED TIMESTAMP: ", timeNow())
file_print_pr("[DEBUG] Timestamp 51: ", timeNow())
file_print_pr("[DEBUG] Timestamp 52: ", timeNow())
except KeyboardInterrupt: except KeyboardInterrupt:
file_print("Exiting on user's request 2") file_print("Exiting on user's request 2")
exit(0) exit(0)
file_print_pr("[DEBUG] Timestamp 53: ", timeNow())
#### AFTER EXITING, PRINT THE RESULTS #### #### AFTER EXITING, PRINT THE RESULTS ####
results=[] results=[]
while not q.empty(): while not q.empty():
@@ -1083,12 +1098,12 @@ def main():
if values.rdns_scanning: if values.rdns_scanning:
targets=[] targets=[]
q2 = multiprocessing.Queue() q2 = multiprocessing.Queue()
file_print(">>>>>>> Timestamp 9: ", timeNow()) file_print_pr("[DEBUG] Timestamp 54: ", timeNow())
pr2 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q2,values.dns,values.show_ttl, values.dos_ttl,values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6)) pr2 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q2,values.dns,values.show_ttl, values.dos_ttl,values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6))
pr2.daemon = True pr2.daemon = True
pr2.start() pr2.start()
time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic
file_print(">>>>>>> Timestamp 10: ", timeNow()) file_print_pr("[DEBUG] Timestamp 55: ", timeNow())
for r in results: for r in results:
r2=r.split(" ") r2=r.split(" ")
service=r2[7].strip('"') service=r2[7].strip('"')
@@ -1100,8 +1115,11 @@ def main():
targets.append((r2[1],service)) targets.append((r2[1],service))
requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout) requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout)
if pr2: if pr2:
file_print_pr("[DEBUG] Timestamp 56: ", timeNow())
try: try:
file_print_pr("[DEBUG] Timestamp 57: ", timeNow())
pr2.join() pr2.join()
file_print_pr("[DEBUG] Timestamp 58: ", timeNow())
except KeyboardInterrupt: except KeyboardInterrupt:
file_print("Exiting on user's request 3") file_print("Exiting on user's request 3")
while not q2.empty(): while not q2.empty():
@@ -1109,12 +1127,12 @@ def main():
elif values.service_scan: elif values.service_scan:
targets=[] targets=[]
q2 = multiprocessing.Queue() q2 = multiprocessing.Queue()
file_print(">>>>>>> Timestamp 11: ", timeNow()) file_print_pr("[DEBUG] Timestamp 59: ", timeNow())
pr2 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q2,values.dns,values.show_ttl, values.dos_ttl,values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6)) pr2 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q2,values.dns,values.show_ttl, values.dos_ttl,values.conflict, values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6))
pr2.daemon = True pr2.daemon = True
pr2.start() pr2.start()
time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic
file_print(">>>>>>> Timestamp 12: ", timeNow()) file_print_pr("[DEBUG] Timestamp 60: ", timeNow())
for r in results: for r in results:
r2=r.split(" ") r2=r.split(" ")
service=r2[7].strip('"')[:-1] service=r2[7].strip('"')[:-1]
@@ -1124,19 +1142,21 @@ def main():
requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout) requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout)
if pr2: if pr2:
try: try:
file_print_pr("[DEBUG] Timestamp 61: ", timeNow())
pr2.join() pr2.join()
file_print_pr("[DEBUG] Timestamp 62: ", timeNow())
except KeyboardInterrupt: except KeyboardInterrupt:
file_print("Exiting on user's request 4") file_print("Exiting on user's request 4")
while not q2.empty(): while not q2.empty():
results.append(q2.get()) results.append(q2.get())
targets2=[] targets2=[]
q3 = multiprocessing.Queue() q3 = multiprocessing.Queue()
file_print(">>>>>>> Timestamp 13: ", timeNow()) file_print_pr("[DEBUG] Timestamp 63: ", timeNow())
pr3 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q3,values.dns,values.show_ttl, values.dos_ttl, values.conflict,values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6)) pr3 = multiprocessing.Process(target=Sniffer, args=(myfilter, values.interface, float(values.sniffer_timeout),q3,values.dns,values.show_ttl, values.dos_ttl, values.conflict,values.ttl,values.d4, values.d6, values.target_mac, values.auto_fake_responses,source_IPv6, source_IPv4, target_mac1, target_mac2,source_mac,values.hlimit,values.workstation,values.printer,values.googlecast,values.airtv,values.flood,values.flooding_timeout,values.flooding_interval,values.v4,values.v6))
pr3.daemon = True pr3.daemon = True
pr3.start() pr3.start()
time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic time.sleep(1) #to make sure than sniffer has started before we proceed, otherwise you may miss some traffic
file_print(">>>>>>> Timestamp 14: ", timeNow()) file_print_pr("[DEBUG] Timestamp 64: ", timeNow())
for r in results: for r in results:
r2=r.split(" ") r2=r.split(" ")
service=r2[4] service=r2[4]
@@ -1149,7 +1169,9 @@ def main():
requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout) requests(values.interface,values.v4,values.v6,source_mac,target_mac1,target_mac2,source_IPv4,source_IPv6,values.d4,values.d6,values.hlimit,values.dns,values.domain,service,values.qtype,True,q_class,values.flood,values.flooding_interval,values.flooding_timeout)
if pr3: if pr3:
try: try:
file_print_pr("[DEBUG] Timestamp 65: ", timeNow())
pr3.join() pr3.join()
file_print_pr("[DEBUG] Timestamp 66: ", timeNow())
except KeyboardInterrupt: except KeyboardInterrupt:
file_print("Exiting on user's request 5") file_print("Exiting on user's request 5")
while not q3.empty(): while not q3.empty():