#' Extract packet summary table (if any) from a PCAP #' #' @param pcap path to PCAP file ([path.expand()] will be called on this value) #' @return data frame #' @export #' @examples #' tryCatch( #' packet_summary(system.file("pcap", "http.pcap", package = "tsharrk")), #' error = function(e) message("No tshark") #' ) packet_summary <- function(pcap) { pcap <- path.expand(pcap[1]) if (!file.exists(pcap)) { stop(sprintf("Cannont locate %s", pcap), call.=FALSE) } errf <- tempfile() on.exit(unlink(errf)) outf <- tempfile() on.exit(unlink(outf)) system2( command = find_tshark(), args = c("-T", "tabs", "-r", pcap), stderr = errf, stdout = outf ) -> res if (res != 0) { stop("Error retrieving packet summary from PCAP.", call.=FALSE) } if (file.size(outf) == 0) { data.frame( packet_num = double(0), ts = double(0), src = character(0), dst = character(0), proto = character(0), length = double(0), info = character(0) ) } else { read.csv( file = outf, sep = "\t", header = FALSE, col.names = c("packet_num", "ts", "src", "junk", "dst", "proto", "length", "info"), colClasses = c("double", "double", "character", "character", "character", "character", "double", "character") ) -> out out$junk <- NULL out } }