IP 주소의 대량 데이터세트에 대해 현지화된 대량 ASN 조회를 수행합니다.
문서 상단(http://thyme.apnic.net/current/data-raw-table 및 http://thyme.apnic.net/current/data-used-autnums)에 연결된 두 개의 BGP 데이터세트를 다운로드합니다. . 첫 번째에는 IANA에서 할당된 모든 서브넷 범위와 관련 ASN 번호가 포함됩니다. 두 번째는 ASN 번호 및 설명자 목록입니다. 둘 다 http://thyme.apnic.net에 설명된 대로 매일 오전 4시에서 오전 9시(GMT 기준) 사이에 업데이트됩니다. 이 두 파일과 uniq_ip.txt라는 이름으로 조회하려는 IP 목록을 ip2asn.py 스크립트와 동일한 폴더에 넣습니다. Bulk-ip-to-asn-correlation.py를 실행하면 식별된 모든 유효하지 않은 IP 주소(로컬 및 예약 주소 포함) 목록이 포함된 ip2asn--invalids.txt와 csv가 포함된 ip2asn-results.txt의 두 가지 출력 파일이 제공됩니다. 타임스탬프, ip, asn, "asn 설명자" 헤더로 형식화된 결과입니다.
제공된 IP 주소와 IANA에 등록된 관련 서브넷 간의 상관 관계를 수행하는 가장 효율적인 방법을 찾는 데 시간이 좀 걸렸습니다.
내 구현의 핵심은 https://docs.python.org/3/library/bisect.html의 첫 번째 "다른 예"에 설명되어 있습니다. 여기서 문자 등급을 채점 척도를 기반으로 한 시험 점수와 연관시킵니다.
모든 IP 주소는 계산을 위해 정수 값으로 변환됩니다.
먼저 각 CIDR 접두사에 포함된 총 IP 주소 수(/1~/32)의 튜플을 만들고 이를 NETMASK_MAP에 저장합니다. 잘못된 주소를 필터링하여 제공된 파일에서 조회할 IP 주소의 깨끗한 목록을 만드는 것 같습니다. 이 과정에서 쿼리 주소에 대한 첫 번째 옥텟의 고유한 목록도 추출합니다. 이는 BGP 데이터 세트에서 불필요한 범위를 필터링하는 데 활용됩니다.
다음으로, IANA에 등록된 서브넷과 해당 ASN이 포함된 data-raw-table 파일을 활용하여 두 개의 조회 테이블을 구축했습니다. BGP 데이터 세트의 각 서브넷에 대해 먼저 쿼리 IP 주소의 고유한 옥텟 목록에 첫 번째 옥텟이 포함되어 있는지 확인합니다. 그렇다면 지정된 CIDR 범위에서 최대 IP 주소(calculate_net_rage())를 계산합니다. 이러한 최대 IP는 subnet_lookup_table에 추가됩니다. 두 번째 테이블인 asn_lookup_table은 각 최대 IP 주소에 해당하는 ASN 번호를 포함하는 순서대로 생성됩니다. 이는 subnet_lookup_table이 중단점 변수이고 asn_lookup_table이 문자 등급인 등급 이등분 예를 따릅니다.
그런 다음 ASN 번호와 해당 설명 텍스트의 상관 관계를 포함하는 data-used-autnums BGP 데이터 세트에서 최종 테이블을 구축합니다.
마지막으로, 정리된 쿼리 목록의 각 IP 주소에 대해 연결된 Python 문서에 설명된 대로 양분을 수행하여 해당 IP가 속하는 최대 IP 주소와 관련 ASN 번호를 연관시킵니다. 그러면 이는 설명자 텍스트와 연관됩니다.
귀하가 제공한 IP가 존재하지 않으면 무슨 일이 일어날지 전혀 모릅니다. 아마 폭발할 거예요. 행운을 빌어요.