2016-09-26 2 views
0

회사에 약 200 개의 CIDR IP 블록 목록이 있습니다. 웹 페이지 방문객이 하루에 수천 건의 조회수를 기록하는지 여부를 확인하려고합니다. 이상적으로, 내가 원하는 결과는 그 범위를 벗어나는 퍼센트와 그 IP의 목록입니다. 그래서 나는 그것들을 더 확인할 수있었습니다.IP 주소 목록이 CIDR 표기된 IP 블록 목록에 있는지 확인하십시오.

iptools 패키지의 ip_in_range() 기능을 찾았지만 1 : 1 비교입니다. 나는 어떤 종류의 사랑스러운 또는 다른 루프가 내가 원하는 것을 성취 할 수 있어야한다고 생각하지만, 나는 지금까지 올바른 표기법을 제시 할 수 없었던 초보자이다. 저는 IP # 1을 가지고 다양한 CIDR에 대해 테스트하고 싶습니다. TRUE가되면 멈출 수는 있지만 너무 자주 반복되지 않으므로 모든 블록을 순환 할 수 없습니다. 그런 다음 루프는 IP # 2로 이동하여 다시 이동합니다. 사실, 실패율은 각 IP 옆의 TRUE 및 FALSE 출력만으로도 장애를 수동으로 제거하기에 충분할만큼 충분히 낮을 것으로 예상됩니다.

2 개의 입력을받는 함수를 반복하기 위해 이미 일반적인 방법이 있어야한다는 것을 알고 있습니다. 검색을 위해 올바른 방법을 찾지 못했습니다.

예 데이터 :

visitor_ip_addresses <- c("10.10.1.2", "10.34.21.4", "192.168.23.34", "172.16.34.78", "1.2.3.4", "192.168.4.6") 
ip_ranges <- c("10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12") 
+0

px에서 파고 들기위한 Thx! [GitHub의 버전] (https://github.com/hrbrmstr/iptools)을보십시오. 그것은 내가 생각하는 두 가지 새로운 기능을 가지고 있습니다. 그렇지 않은 경우 문제를 제기하면 필요한 조치를 취할 것입니다. – hrbrmstr

답변

2
devtools::install_github("hrbrmstr/iptools") 

library(iptools) 

visitor_ip_addresses <- c("10.10.1.2", "10.34.21.4", "192.168.23.34", 
          "172.16.34.78", "1.2.3.4", "192.168.4.6") 

ip_ranges <- c("10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12") 

ips_in_cidrs(visitor_ip_addresses, ip_ranges) 
## [1] TRUE TRUE TRUE TRUE FALSE TRUE 

ip_in_any(visitor_ip_addresses, ip_ranges) 
## # A tibble: 6 × 2 
##    ips in_cidr 
##   <chr> <lgl> 
## 1  10.10.1.2 TRUE 
## 2 10.34.21.4 TRUE 
## 3 192.168.23.34 TRUE 
## 4 172.16.34.78 TRUE 
## 5  1.2.3.4 FALSE 
## 6 192.168.4.6 TRUE 

이 우리가 아직 문서화하지 않은이 두 가지 다른 기능이있는 이유는,하지만 하나는 일부 영리한 수학을 사용하고 다른 시도를 사용합니다. 나는 프로덕션 사용을 위해 더 나은 수행을 볼 수있는 각각을 테스트 할 것이다.

+0

멋진. 나는 모든 것을 설치하는 약간의 고난을 가지고 있었다 (꾸러미를 갱신하고, tibble을 설치하는 등). 그러나 나는 거기에 도착했다. 내 출력이 실제로 사용자의 것으로 바뀌 었습니다. ips_in_cidrs가 tbl_df를 제공하고 ip_in_any가 목록을 제공하지만 이것이 완벽하게 보입니다. 그들은 둘 다 같은 액수를 주었고, 그래서 정직성이 좋아 보인다. 예상보다 실패가 많아서 더 많은 일을합니다. – karthwyne

+0

다행스럽게도 (그리고 아마도 출력 덩어리를 잘못 붙여 넣었을 것입니다.) 그것은 10 월 CRAN에있을 것이므로 Win & macOS 용 바이너리가 유용 할 것입니다. 더 많은 기능 요청이있는 경우 주저하지 말고 문제를 제기하십시오. – hrbrmstr