|
33 | 33 | _ADDRESSTYPE_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21)
|
34 | 34 | _CATEGORY_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22)
|
35 | 35 | _DISTRICT_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23)
|
36 |
| -_ASN_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24) |
37 |
| -_AS_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25) |
| 36 | +_ASN_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24) |
| 37 | +_AS_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25) |
| 38 | +_ASDOMAIN_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26) |
| 39 | +_ASUSAGETYPE_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27) |
| 40 | +_ASCIDR_POSITION = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28) |
38 | 41 |
|
39 | 42 | if sys.version < '3':
|
40 | 43 | import urllib, httplib
|
@@ -156,6 +159,9 @@ class IP2LocationRecord:
|
156 | 159 | district = "This parameter is unavailable in selected .BIN data file. Please upgrade data file."
|
157 | 160 | asn = "This parameter is unavailable in selected .BIN data file. Please upgrade data file."
|
158 | 161 | as_name = "This parameter is unavailable in selected .BIN data file. Please upgrade data file."
|
| 162 | + as_domain = "This parameter is unavailable in selected .BIN data file. Please upgrade data file." |
| 163 | + as_usagetype = "This parameter is unavailable in selected .BIN data file. Please upgrade data file." |
| 164 | + as_cidr = "This parameter is unavailable in selected .BIN data file. Please upgrade data file." |
159 | 165 |
|
160 | 166 | def __str__(self):
|
161 | 167 | return str(self.__dict__)
|
@@ -335,6 +341,18 @@ def get_as(self, ip):
|
335 | 341 | ''' Get as_name '''
|
336 | 342 | rec = self.get_all(ip)
|
337 | 343 | return rec and rec.as_name
|
| 344 | + def get_asdomain(self, ip): |
| 345 | + ''' Get as_domain ''' |
| 346 | + rec = self.get_all(ip) |
| 347 | + return rec and rec.as_domain |
| 348 | + def get_asusagetype(self, ip): |
| 349 | + ''' Get as_usagetype ''' |
| 350 | + rec = self.get_all(ip) |
| 351 | + return rec and rec.as_usagetype |
| 352 | + def get_ascidr(self, ip): |
| 353 | + ''' Get as_cidr ''' |
| 354 | + rec = self.get_all(ip) |
| 355 | + return rec and rec.as_cidr |
338 | 356 |
|
339 | 357 | def get_all(self, addr):
|
340 | 358 | ''' Get the whole record with all fields read from the file
|
@@ -492,6 +510,15 @@ def calc_off(what, mid):
|
492 | 510 | if _AS_POSITION[self._dbtype] != 0:
|
493 | 511 | rec.as_name = self._reads(struct.unpack('<I', raw_positions_row[((_AS_POSITION[self._dbtype]-1) * 4 - 4) : ((_AS_POSITION[self._dbtype]-1) * 4)])[0] + 1)
|
494 | 512 |
|
| 513 | + if _ASDOMAIN_POSITION[self._dbtype] != 0: |
| 514 | + rec.as_domain = self._reads(struct.unpack('<I', raw_positions_row[((_ASDOMAIN_POSITION[self._dbtype]-1) * 4 - 4) : ((_ASDOMAIN_POSITION[self._dbtype]-1) * 4)])[0] + 1) |
| 515 | + |
| 516 | + if _ASUSAGETYPE_POSITION[self._dbtype] != 0: |
| 517 | + rec.as_usagetype = self._reads(struct.unpack('<I', raw_positions_row[((_ASUSAGETYPE_POSITION[self._dbtype]-1) * 4 - 4) : ((_ASUSAGETYPE_POSITION[self._dbtype]-1) * 4)])[0] + 1) |
| 518 | + |
| 519 | + if _ASCIDR_POSITION[self._dbtype] != 0: |
| 520 | + rec.as_cidr = self._reads(struct.unpack('<I', raw_positions_row[((_ASCIDR_POSITION[self._dbtype]-1) * 4 - 4) : ((_ASCIDR_POSITION[self._dbtype]-1) * 4)])[0] + 1) |
| 521 | + |
495 | 522 | return rec
|
496 | 523 |
|
497 | 524 | def __iter__(self):
|
|
0 commit comments