diff --git a/scapy/as_resolvers.py b/scapy/as_resolvers.py index 2c69b101fad04b0d9f3bb46b391632da66287397..61a032dcb14909110fda89025cac8eb71688c86f 100644 --- a/scapy/as_resolvers.py +++ b/scapy/as_resolvers.py @@ -76,7 +76,6 @@ class AS_resolver_cymru(AS_resolver): server = "whois.cymru.com" options = None def resolve(self, *ips): - ASNlist = [] s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.server,self.port)) s.send(b"begin\r\n"+b"\r\n".join(ip.encode("utf8") for ip in ips)+b"\r\nend\r\n") @@ -87,7 +86,14 @@ class AS_resolver_cymru(AS_resolver): break r += l s.close() - for l in r.splitlines()[1:]: + + return self.parse(r) + + def parse(self, data): + """Parse bulk cymru data""" + + ASNlist = [] + for l in data.splitlines()[1:]: l = plain_str(l) if "|" not in l: continue diff --git a/test/regression.uts b/test/regression.uts index 257917ae526373c67de758c2b7eab9772feb02d6..beacb6d79c73fa7fbfbc75e2a68c7bdd111a3c01 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -802,28 +802,9 @@ for i in six.moves.range(5): break assert (len(ret) == 2) - all(x[1] == "AS15169" for x in ret) -= AS resolver - IPv6 -~ netaccess IP -* This test retries on failure because it often fails - ret = list() -success = False -as_resolver6 = AS_resolver6() -for i in six.moves.range(5): - try: - ret = as_resolver6.resolve("2001:4860:4860::8888", "2001:4860:4860::4444") - except socket.error: - time.sleep(2) - else: - success = True - break - -assert (len(ret) == 2) -assert all(x[1] == 15169 for x in ret) - success = False for i in six.moves.range(5): try: @@ -837,7 +818,8 @@ for i in six.moves.range(5): assert (len(ret) == 1) assert all(x[1] == "AS15169" for x in ret) -# This test is too buggy +# This test is too buggy, and is simulated below +#ret = list() #success = False #for i in six.moves.range(5): # try: @@ -852,6 +834,35 @@ assert all(x[1] == "AS15169" for x in ret) # #all(x[1] == "AS15169" for x in ret) +cymru_bulk_data = """ +Bulk mode; whois.cymru.com [2017-10-03 08:38:08 +0000] +24776 | 217.25.178.5 | INFOCLIP-AS, FR +36459 | 192.30.253.112 | GITHUB - GitHub, Inc., US +26496 | 68.178.213.61 | AS-26496-GO-DADDY-COM-LLC - GoDaddy.com, LLC, US +""" +tmp = AS_resolver_cymru().parse(cymru_bulk_data) +assert(len(tmp) == 3) +assert([l[1] for l in tmp] == ['AS24776', 'AS36459', 'AS26496']) + += AS resolver - IPv6 +~ netaccess IP +* This test retries on failure because it often fails + +ret = list() +success = False +as_resolver6 = AS_resolver6() +for i in six.moves.range(5): + try: + ret = as_resolver6.resolve("2001:4860:4860::8888", "2001:4860:4860::4444") + except socket.error: + time.sleep(2) + else: + success = True + break + +assert (len(ret) == 2) +assert all(x[1] == 15169 for x in ret) + ############ ############