You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
#' Finds IPs in CIDR blocks
|
|
#'
|
|
#' After you use [create_cidr_lookup_table()] and [create_ip_source_table()]
|
|
#' use this function to do the lookup.
|
|
#'
|
|
#' @param pgcon a PostgreSQL DBI connection
|
|
#' @param ip_tbl name of the IP table (valid PG table name syntax)
|
|
#' @param cidr_tbl name of the CIDR table (valid PG table name syntax)
|
|
#' @param ip_col Name of the column that holds the IP addresses in `ip_tbl`
|
|
#' @param cidr_col Name of the column that holds the CIDR block in `cidr_tbl`
|
|
#' @export
|
|
#' @examples \dontrun{
|
|
#' DBI::dbConnect(
|
|
#' odbc::odbc(),
|
|
#' driver = "/usr/local/lib/psqlodbca.so",
|
|
#' Database = "working",
|
|
#' Host = "localhost"
|
|
#' ) -> con
|
|
#'
|
|
#' create_cidr_lookup_table(
|
|
#' pgcon = con,
|
|
#' tbl_name = "amazon_cidrs",
|
|
#' drop = TRUE,
|
|
#' xdf = system.file("extdat", "amzn-cidrs.csv", package = "pgcidr"),
|
|
#' )
|
|
#'
|
|
#' create_ip_source_table(
|
|
#' pgcon = con,
|
|
#' tbl_name = "weblog",
|
|
#' drop = TRUE,
|
|
#' xdf = system.file("extdat", "weblog.csv", package = "pgcidr")
|
|
#' )
|
|
#'
|
|
#' find_ips_in_cidrs(
|
|
#' con, "weblog", "amazon_cidrs"
|
|
#' )
|
|
#'
|
|
#' }
|
|
find_ips_in_cidrs <- function(pgcon, ip_tbl, cidr_tbl,
|
|
ip_col = "ip", cidr_col = "cidr") {
|
|
|
|
stopifnot(inherits(pgcon, "PostgreSQL"))
|
|
|
|
ip_tbl <- ip_tbl[1]
|
|
cidr_tbl <- cidr_tbl[1]
|
|
ip_col <- ip_col[1]
|
|
cidr_col <- cidr_col[1]
|
|
|
|
DBI::dbGetQuery(
|
|
pgcon,
|
|
ac(gg("
|
|
SELECT
|
|
*
|
|
FROM {ip_tbl}, {cidr_tbl} WHERE {ip_col} <<= {cidr_col}
|
|
"))
|
|
) -> res
|
|
|
|
if (inherits(res, "data.frame")) {
|
|
class(res) <- c("tbl_df", "tbl", "data.frame")
|
|
}
|
|
|
|
res
|
|
|
|
}
|
|
|