From 1620611435270aca0a6455f26601611cf98b120c Mon Sep 17 00:00:00 2001 From: Doug Camens Date: Thu, 27 Oct 2022 10:41:35 -0400 Subject: [PATCH 1/5] Add --overview and --no-print options --overview: that prints an overview of the contents of the capture --no-print: suppress printing of individual packets --- ethertype.h | 7 + netdissect.h | 2 + print-ether.c | 7 - tcpdump.c | 251 ++++++++++++++++++++++++--- tests/TESTLIST | 6 + tests/overview.pcap | Bin 0 -> 138271 bytes tests/overview1.out | 75 ++++++++ tests/overview2.out | 412 ++++++++++++++++++++++++++++++++++++++++++++ tests/overview3.out | 0 9 files changed, 732 insertions(+), 28 deletions(-) create mode 100644 tests/overview.pcap create mode 100644 tests/overview1.out create mode 100644 tests/overview2.out create mode 100644 tests/overview3.out diff --git a/ethertype.h b/ethertype.h index 8f8acff04..e4e0c4e2c 100644 --- a/ethertype.h +++ b/ethertype.h @@ -216,4 +216,11 @@ #define ETHERTYPE_ARISTA 0xd28b /* Arista Networks vendor specific EtherType */ #endif +/* + * Length of an Ethernet header; note that some compilers may pad + * "struct ether_header" to a multiple of 4 bytes, for example, so + * "sizeof (struct ether_header)" may not give the right answer. + */ +#define ETHER_HDRLEN 14 + extern const struct tok ethertype_values[]; diff --git a/netdissect.h b/netdissect.h index d953a464e..804dd77a8 100644 --- a/netdissect.h +++ b/netdissect.h @@ -238,6 +238,8 @@ struct netdissect_options { const u_char *ndo_packetp; const u_char *ndo_snapend; + int ndo_dlt; /* datalink type */ + /* stack of saved packet boundary and buffer information */ struct netdissect_saved_packet_info *ndo_packet_info_stack; diff --git a/print-ether.c b/print-ether.c index b1865d179..f0e314ae0 100644 --- a/print-ether.c +++ b/print-ether.c @@ -42,13 +42,6 @@ struct ether_header { nd_uint16_t ether_length_type; }; -/* - * Length of an Ethernet header; note that some compilers may pad - * "struct ether_header" to a multiple of 4 bytes, for example, so - * "sizeof (struct ether_header)" may not give the right answer. - */ -#define ETHER_HDRLEN 14 - const struct tok ethertype_values[] = { { ETHERTYPE_IP, "IPv4" }, { ETHERTYPE_MPLS, "MPLS unicast" }, diff --git a/tcpdump.c b/tcpdump.c index 08e038963..9015f913d 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -167,6 +167,8 @@ The Regents of the University of California. All rights reserved.\n"; #include "fptype.h" +#include "ethertype.h" + #ifndef PATH_MAX #define PATH_MAX 1024 #endif @@ -221,6 +223,8 @@ static int Jflag; /* list available time stamp types */ static int jflag = -1; /* packet time stamp source */ #endif static int lflag; /* line-buffered output */ +static int overviewFlag = 0; /* overview mode */ +static int noPrintFlag = 0; /* don't print packets */ static int pflag; /* don't go promiscuous */ #ifdef HAVE_PCAP_SETDIRECTION static int Qflag = -1; /* restrict captured packet by send/receive direction */ @@ -240,6 +244,29 @@ static int count_mode; static int infodelay; static int infoprint; +#define MAX_ADDR_LEN 100 + +struct endpoint_stats { + char src[MAX_ADDR_LEN]; + char dst[MAX_ADDR_LEN]; + u_int64_t kilobytes; + u_int64_t bytes; + u_int64_t packets; +}; + +#define MAX_ENDPOINT_PAIRS 1000 + +static struct endpoint_stats endpoint_overview_stats[MAX_ENDPOINT_PAIRS]; +static int endpoint_overview_stats_len = 0; +static struct timeval capture_start_time; +static struct timeval capture_end_time; + +/* Column headers for overview option */ +#define COLUMN_HEADER_SRC "SRC" +#define COLUMN_HEADER_DST "DST" +#define COLUMN_HEADER_PACKETS "PACKETS" +#define COLUMN_HEADER_BYTES "BYTES" + char *program_name; /* Forwards */ @@ -253,6 +280,11 @@ static void print_packet(u_char *, const struct pcap_pkthdr *, const u_char *); static void dump_packet_and_trunc(u_char *, const struct pcap_pkthdr *, const u_char *); static void dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *); +static void add_to_endpoint_statistics(const char* src, const char* dst, int packet_bytes); +static void print_with_spaces(const char* str, size_t padding_len, int prefix_spaces); +static size_t count_digits(u_int64_t n); +static void print_endpoint_statistics(void); + #ifdef SIGNAL_REQ_INFO static void requestinfo(int); #endif @@ -270,6 +302,7 @@ static void flushpcap(int); static void info(int); static u_int packets_captured; +static u_int64_t bytes_captured; #ifdef HAVE_PCAP_FINDALLDEVS static const struct tok status_flags[] = { @@ -692,6 +725,8 @@ show_remote_devices_and_exit(void) #define OPTION_FP_TYPE 135 #define OPTION_COUNT 136 #define OPTION_PRINT_SAMPLING 137 +#define OPTION_OVERVIEW 137 +#define OPTION_NO_PRINT 138 static const struct option longopts[] = { #if defined(HAVE_PCAP_CREATE) || defined(_WIN32) @@ -741,6 +776,8 @@ static const struct option longopts[] = { { "print", no_argument, NULL, OPTION_PRINT }, { "print-sampling", required_argument, NULL, OPTION_PRINT_SAMPLING }, { "version", no_argument, NULL, OPTION_VERSION }, + { "overview", no_argument, NULL, OPTION_OVERVIEW }, + { "no-print", no_argument, NULL, OPTION_NO_PRINT }, { NULL, 0, NULL, 0 } }; @@ -1466,6 +1503,12 @@ open_interface(const char *device, netdissect_options *ndo, char *ebuf) return (pc); } +static int +no_printf(netdissect_options *ndo, const char *fmt, ...) +{ + return (0); +} + int main(int argc, char **argv) { @@ -1474,7 +1517,6 @@ main(int argc, char **argv) char *cp, *infile, *cmdbuf, *device, *RFileName, *VFileName, *WFileName; char *endp; pcap_handler callback; - int dlt; const char *dlt_name; struct bpf_program fcode; #ifndef _WIN32 @@ -1525,7 +1567,7 @@ main(int argc, char **argv) VFileName = NULL; VFile = NULL; WFileName = NULL; - dlt = -1; + ndo->ndo_dlt = -1; if ((cp = strrchr(argv[0], PATH_SEPARATOR)) != NULL) ndo->program_name = program_name = cp + 1; else @@ -2013,6 +2055,14 @@ main(int argc, char **argv) count_mode = 1; break; + case OPTION_OVERVIEW: + overviewFlag = 1; + break; + + case OPTION_NO_PRINT: + noPrintFlag = 1; + break; + default: print_usage(stderr); exit_tcpdump(S_ERR_HOST_PROGRAM); @@ -2142,18 +2192,18 @@ main(int argc, char **argv) error("unable to limit pcap descriptor"); } #endif - dlt = pcap_datalink(pd); - dlt_name = pcap_datalink_val_to_name(dlt); + ndo->ndo_dlt = pcap_datalink(pd); + dlt_name = pcap_datalink_val_to_name(ndo->ndo_dlt); fprintf(stderr, "reading from file %s", RFileName); if (dlt_name == NULL) { - fprintf(stderr, ", link-type %u", dlt); + fprintf(stderr, ", link-type %u", ndo->ndo_dlt); } else { fprintf(stderr, ", link-type %s (%s)", dlt_name, - pcap_datalink_val_to_description(dlt)); + pcap_datalink_val_to_description(ndo->ndo_dlt)); } fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd)); #ifdef DLT_LINUX_SLL2 - if (dlt == DLT_LINUX_SLL2) + if (ndo->ndo_dlt == DLT_LINUX_SLL2) fprintf(stderr, "Warning: interface names might be incorrect\n"); #endif } else if (dflag && !device) { @@ -2522,8 +2572,8 @@ DIAG_ON_ASSIGN_ENUM pcap_userdata = (u_char *)&dumpinfo; } if (print) { - dlt = pcap_datalink(pd); - ndo->ndo_if_printer = get_if_printer(dlt); + ndo->ndo_dlt = pcap_datalink(pd); + ndo->ndo_if_printer = get_if_printer(ndo->ndo_dlt); dumpinfo.ndo = ndo; } else dumpinfo.ndo = NULL; @@ -2533,8 +2583,14 @@ DIAG_ON_ASSIGN_ENUM pcap_dump_flush(pdd); #endif } else { - dlt = pcap_datalink(pd); - ndo->ndo_if_printer = get_if_printer(dlt); + ndo->ndo_dlt = pcap_datalink(pd); + ndo->ndo_if_printer = get_if_printer(ndo->ndo_dlt); + + /* If no printing of packets is desired, override the printf function to suppress printing packets */ + if (noPrintFlag) { + ndo->ndo_printf = no_printf; + } + callback = print_packet; pcap_userdata = (u_char *)ndo; } @@ -2600,14 +2656,14 @@ DIAG_ON_ASSIGN_ENUM program_name); } else (void)fprintf(stderr, "%s: ", program_name); - dlt = pcap_datalink(pd); - dlt_name = pcap_datalink_val_to_name(dlt); + ndo->ndo_dlt = pcap_datalink(pd); + dlt_name = pcap_datalink_val_to_name(ndo->ndo_dlt); (void)fprintf(stderr, "listening on %s", device); if (dlt_name == NULL) { - (void)fprintf(stderr, ", link-type %u", dlt); + (void)fprintf(stderr, ", link-type %u", ndo->ndo_dlt); } else { (void)fprintf(stderr, ", link-type %s (%s)", dlt_name, - pcap_datalink_val_to_description(dlt)); + pcap_datalink_val_to_description(ndo->ndo_dlt)); } (void)fprintf(stderr, ", snapshot length %d bytes\n", ndo->ndo_snaplen); (void)fflush(stderr); @@ -2681,7 +2737,7 @@ DIAG_ON_ASSIGN_ENUM } #endif new_dlt = pcap_datalink(pd); - if (new_dlt != dlt) { + if (new_dlt != ndo->ndo_dlt) { /* * The new file has a different * link-layer header type from the @@ -2709,8 +2765,8 @@ DIAG_ON_ASSIGN_ENUM * and recompile the filter with * the new DLT. */ - dlt = new_dlt; - ndo->ndo_if_printer = get_if_printer(dlt); + ndo->ndo_dlt = new_dlt; + ndo->ndo_if_printer = get_if_printer(ndo->ndo_dlt); if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0) error("%s", pcap_geterr(pd)); } @@ -2724,14 +2780,14 @@ DIAG_ON_ASSIGN_ENUM /* * Report the new file. */ - dlt_name = pcap_datalink_val_to_name(dlt); + dlt_name = pcap_datalink_val_to_name(ndo->ndo_dlt); fprintf(stderr, "reading from file %s", RFileName); if (dlt_name == NULL) { - fprintf(stderr, ", link-type %u", dlt); + fprintf(stderr, ", link-type %u", ndo->ndo_dlt); } else { fprintf(stderr, ", link-type %s (%s)", dlt_name, - pcap_datalink_val_to_description(dlt)); + pcap_datalink_val_to_description(ndo->ndo_dlt)); } fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd)); } @@ -2743,6 +2799,11 @@ DIAG_ON_ASSIGN_ENUM fprintf(stdout, "%u packet%s\n", packets_captured, PLURAL_SUFFIX(packets_captured)); + /* If overview mode was specified, print the overview */ + if (overviewFlag) { + print_endpoint_statistics(); + } + free(cmdbuf); pcap_freecode(&fcode); exit_tcpdump(status == -1 ? S_ERR_HOST_PROGRAM : S_SUCCESS); @@ -3185,11 +3246,157 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) if (!count_mode) pretty_print_packet((netdissect_options *)user, h, sp, packets_captured); + /* If overview mode was selected on the command line, store the statistics + between each src/dst pair for each ethernet packet. */ + if (overviewFlag && h && sp && user) { + const struct ip* ipPacket; + netdissect_options* ndo; + + ndo = (netdissect_options*)user; + + if (ndo->ndo_dlt == DLT_EN10MB) { + + if (capture_start_time.tv_sec == 0) + capture_start_time.tv_sec = h->ts.tv_sec; + + capture_end_time.tv_sec = h->ts.tv_sec; + + ipPacket = (const struct ip*)(sp + ndo->ndo_ll_hdr_len); + + add_to_endpoint_statistics( + ipaddr_string(ndo, ipPacket->ip_src), + ipaddr_string(ndo, ipPacket->ip_dst), + h->len); + } + } + --infodelay; if (infoprint) info(0); } +static void add_to_endpoint_statistics(const char* src, const char* dst, int packet_bytes) +{ + struct endpoint_stats* stats = NULL; + + /* Add to the total bytes */ + bytes_captured += packet_bytes; + + /* Lookup src and dst strings in overview_stats. */ + for (int i = 0; i < endpoint_overview_stats_len && stats == NULL; i++) { + if (!strcmp(endpoint_overview_stats[i].src, src) && !strcmp(endpoint_overview_stats[i].dst, dst)) { + stats = &endpoint_overview_stats[i]; + } + } + + /* Add a new array element if needed. */ + if (!stats && endpoint_overview_stats_len < MAX_ENDPOINT_PAIRS) { + endpoint_overview_stats_len++; + stats = &endpoint_overview_stats[endpoint_overview_stats_len - 1]; + strncpy(stats->src, src, MAX_ADDR_LEN); + stats->src[MAX_ADDR_LEN - 1] = 0; + strncpy(stats->dst, dst, MAX_ADDR_LEN); + stats->dst[MAX_ADDR_LEN - 1] = 0; + } + + /* Add to the stats. */ + if (stats) { + stats->packets++; + stats->bytes += packet_bytes; + } +} + +void print_with_spaces(const char* str, size_t padding_len, int prefix_spaces_flag) +{ + size_t spaces = 0; + + if (!prefix_spaces_flag) printf("%s", str); + + spaces = padding_len - strlen(str); + while (spaces) { + printf(" "); + spaces--; + } + + if (prefix_spaces_flag) printf("%s", str); +} + +size_t count_digits(u_int64_t n) +{ + size_t count = 0; + + if (n == 0) + return 1; + while (n != 0) { + n = n / 10; + ++count; + } + return count; +} + +void print_endpoint_statistics(void) +{ + struct endpoint_stats* stats = NULL; + size_t max_src_len = strlen(COLUMN_HEADER_SRC); + size_t max_dst_len = strlen(COLUMN_HEADER_DST); + size_t max_packets_len = strlen(COLUMN_HEADER_PACKETS); + size_t max_bytes_len = strlen(COLUMN_HEADER_BYTES); + size_t len = 0; + char str[MAX_ADDR_LEN]; + + struct timeval delta_time; + double hours; + + delta_time.tv_sec = capture_end_time.tv_sec - capture_start_time.tv_sec; + hours = (double)delta_time.tv_sec / 3600.0; + + printf("\n"); + printf("OVERVIEW\n"); + printf("--------\n"); + printf("packets_captured: %d\n", packets_captured); + printf("bytes_captured: %ld\n", bytes_captured); + printf("seconds: %ld\n", delta_time.tv_sec); + printf("hours: %2.2f\n", hours); + printf("\n"); + + for (int i = 0; i < endpoint_overview_stats_len; i++) { + stats = &endpoint_overview_stats[i]; + if ((len = strlen(stats->src)) > max_src_len) { + max_src_len = len; + } + if ((len = strlen(stats->dst)) > max_dst_len) { + max_dst_len = len; + } + if ((len = count_digits(stats->packets)) > max_packets_len) { + max_packets_len = len; + } + if ((len = count_digits(stats->bytes)) > max_bytes_len) { + max_bytes_len = len; + } + } + + print_with_spaces(COLUMN_HEADER_SRC, max_src_len + 1, 0); + print_with_spaces(COLUMN_HEADER_DST, max_dst_len + 1, 0); + print_with_spaces(COLUMN_HEADER_PACKETS, max_packets_len + 1, 1); + print_with_spaces(COLUMN_HEADER_BYTES, max_bytes_len + 1, 1); + printf("\n"); + + for (int i = 0; i < endpoint_overview_stats_len; i++) { + stats = &endpoint_overview_stats[i]; + + print_with_spaces(stats->src, max_src_len + 1, 0); + print_with_spaces(stats->dst, max_dst_len + 1, 0); + + sprintf(str, "%ld", stats->packets); + print_with_spaces(str, max_packets_len + 1, 1); + + sprintf(str, "%ld", stats->bytes); + print_with_spaces(str, max_bytes_len + 1, 1); + + printf("\n"); + } +} + #ifdef SIGNAL_REQ_INFO static void requestinfo(int signo _U_) @@ -3310,4 +3517,6 @@ print_usage(FILE *f) #endif (void)fprintf(f, "\t\t[ -z postrotate-command ] [ -Z user ] [ expression ]\n"); + (void)fprintf(f, +"\t\t[ --overview ] [ --no-print ]\n"); } diff --git a/tests/TESTLIST b/tests/TESTLIST index ecc733044..bb5ec8df2 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -909,3 +909,9 @@ quic_handshake quic_handshake.pcap quic_handshake.out -v quic_handshake_truncated quic_handshake_truncated.pcap quic_handshake_truncated.out -v quic_retry quic_retry.pcap quic_retry.out -v gquic gquic.pcap gquic.out -v + +# Overview tests +overview1 overview.pcap overview1.out --overview --no-print +overview2 overview.pcap overview2.out --overview -t +overview3 overview.pcap overview3.out --no-print + diff --git a/tests/overview.pcap b/tests/overview.pcap new file mode 100644 index 0000000000000000000000000000000000000000..8c59d8b34f0b59d562c5f31e281db5560fbb8476 GIT binary patch literal 138271 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Λg+ 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 literal 0 HcmV?d00001 diff --git a/tests/overview1.out b/tests/overview1.out new file mode 100644 index 000000000..d86f09003 --- /dev/null +++ b/tests/overview1.out @@ -0,0 +1,75 @@ + +OVERVIEW +-------- +packets_captured: 331 +bytes_captured: 132951 +seconds: 7 +hours: 0.00 + +SRC DST PACKETS BYTES +192.168.1.73 239.255.133.141 7 1101 +192.168.1.74 239.255.133.141 69 8665 +192.168.1.112 34.107.221.82 1 66 +192.168.1.71 239.255.133.141 9 774 +34.107.221.82 192.168.1.112 1 66 +192.168.1.75 239.255.133.141 13 1615 +192.168.1.112 34.160.144.191 2 178 +34.160.144.191 192.168.1.112 2 178 +63.254.192.168 1.122.0.0 6 360 +192.168.1.142 224.0.0.251 2 140 +192.168.1.116 224.0.0.251 8 712 +192.168.1.112 192.168.100.1 2 200 +192.168.1.76 239.255.133.141 8 688 +192.168.1.108 224.0.0.251 9 843 +192.168.100.1 192.168.1.112 2 261 +192.168.1.110 224.0.0.251 8 712 +192.168.1.71 239.255.255.250 9 3309 +192.168.1.76 239.255.255.250 9 3309 +192.168.1.70 239.255.133.141 5 430 +1.0.3.0 12.244.31.84 1 60 +192.168.1.72 239.255.133.141 6 1022 +78.11.192.168 1.73.255.255 1 60 +192.168.1.75 239.255.255.250 9 3309 +192.168.1.122 255.255.255.255 2 120 +192.168.1.104 224.0.0.251 7 535 +0.0.0.0 255.157.127.146 1 151 +192.168.1.71 224.0.0.251 1 80 +192.168.1.100 224.0.0.251 1 394 +192.168.1.74 224.0.0.251 1 80 +192.168.1.124 224.0.0.251 1 394 +192.168.1.119 224.0.0.251 1 402 +192.168.1.75 224.0.0.251 1 80 +192.168.1.76 224.0.0.251 1 80 +192.168.1.73 224.0.0.251 1 80 +192.168.1.70 224.0.0.251 1 80 +192.168.1.16 192.168.1.255 3 189 +32.0.0.0 0.128.0.164 3 357 +192.168.1.72 224.0.0.251 1 80 +192.168.1.71 224.0.0.147 1 236 +192.168.1.112 72.21.91.29 5 330 +72.21.91.29 192.168.1.112 5 330 +192.168.1.76 224.0.0.147 1 236 +192.168.1.74 224.0.0.147 1 236 +192.168.1.112 104.76.214.179 1 66 +192.168.1.112 23.34.242.11 1 66 +192.168.1.112 18.67.79.46 1 66 +192.168.1.73 224.0.0.147 1 235 +104.76.214.179 192.168.1.112 1 66 +23.34.242.11 192.168.1.112 1 66 +18.67.79.46 192.168.1.112 1 66 +192.168.1.75 224.0.0.147 1 236 +192.168.1.112 75.75.77.2 8 1173 +192.168.1.112 208.80.154.224 27 2415 +75.75.77.2 192.168.1.112 9 1121 +208.80.154.224 192.168.1.112 24 90030 +192.168.1.112 142.251.163.94 1 66 +142.251.163.94 192.168.1.112 1 66 +192.168.1.16 239.255.255.250 1 143 +192.168.1.70 224.0.0.147 1 236 +192.168.1.70 239.255.255.250 9 3309 +192.168.1.72 224.0.0.147 1 235 +1.0.3.0 55.47.89.35 1 60 +192.168.1.112 104.18.32.68 5 270 +104.18.32.68 192.168.1.112 5 300 +192.168.1.112 172.253.115.94 1 66 +172.253.115.94 192.168.1.112 1 66 diff --git a/tests/overview2.out b/tests/overview2.out new file mode 100644 index 000000000..0da5b1ba3 --- /dev/null +++ b/tests/overview2.out @@ -0,0 +1,412 @@ + 1 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 2 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 3 IP 192.168.1.112.55708 > 34.107.221.82.80: Flags [.], ack 1828165485, win 501, options [nop,nop,TS val 3851194350 ecr 2581379145], length 0 + 4 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 5 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 6 IP 34.107.221.82.80 > 192.168.1.112.55708: Flags [.], ack 1, win 265, options [nop,nop,TS val 2581389385 ecr 3851163631], length 0 + 7 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 8 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 9 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 10 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 11 IP 192.168.1.112.38402 > 34.160.144.191.443: Flags [P.], seq 3702547014:3702547060, ack 3091258539, win 501, options [nop,nop,TS val 3657904794 ecr 2566982231], length 46 + 12 IP 34.160.144.191.443 > 192.168.1.112.38402: Flags [.], ack 46, win 269, options [nop,nop,TS val 2567040436 ecr 3657904794], length 0 + 13 IP 34.160.144.191.443 > 192.168.1.112.38402: Flags [P.], seq 1:47, ack 46, win 269, options [nop,nop,TS val 2567040436 ecr 3657904794], length 46 + 14 IP 192.168.1.112.38402 > 34.160.144.191.443: Flags [.], ack 47, win 501, options [nop,nop,TS val 3657904866 ecr 2567040436], length 0 + 15 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 16 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 17 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 18 IP 192.168.1.142.5353 > 224.0.0.251.5353: 0 A (QM)? ADM1.local. (28) + 19 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 20 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 21 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 22 IP 192.168.1.112.36334 > 192.168.100.1.53: 15418+ [1au] AAAA? connectivity-check.ubuntu.com. (58) + 23 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 24 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 25 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 26 IP 192.168.100.1.53 > 192.168.1.112.36334: 15418 0/1/1 (119) + 27 IP 192.168.1.112.53524 > 192.168.100.1.53: 64076+ [1au] AAAA? connectivity-check.ubuntu.com. (58) + 28 IP 192.168.100.1.53 > 192.168.1.112.53524: 64076 0/0/1 (58) + 29 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 30 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 31 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 32 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 33 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 34 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 35 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 36 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 37 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 38 IP 192.168.1.74.4777 > 239.255.133.141.4777: UDP, length 537 + 39 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 40 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 364 + 41 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 364 + 42 IP 192.168.1.70.329 > 239.255.133.141.329: UDP, length 44 + 43 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 44 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 311 + 45 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 311 + 46 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 302 + 47 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 302 + 48 a4:13:4e:8c:64:20 > 01:01:c1:00:00:00, ethertype Unknown (0x9003), length 60: + 0x0000: 0100 eaa1 8667 a413 4e8c 6420 0100 0300 .....g..N.d..... + 0x0010: 0cf4 1f54 95b4 f26f bcd2 e8d0 a100 6793 ...T...o......g. + 0x0020: 4e28 75a5 0000 0000 0000 0000 0000 N(u........... + 49 IP 192.168.1.72.329 > 239.255.133.141.329: UDP, length 44 + 50 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 51 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 364 + 52 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 364 + 53 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 54 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 311 + 55 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 311 + 56 ARP, Request who-has 192.168.1.1 (ff:ff:ff:ff:ff:ff) tell 192.168.1.73, length 46 + 57 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 364 + 58 IP 192.168.1.122.41100 > 255.255.255.255.41100: UDP, length 11 + 59 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 302 + 60 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 302 + 61 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 311 + 62 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 63 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 64 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 364 + 65 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 364 + 66 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 302 + 67 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? Android.local. (31) + 68 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 AAAA (QU)? Android.local. (31) + 69 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/2 (Cache flush) A 192.168.1.108 (89) + 70 IP6 fe80::ff9d:7f92:1bcc:f5c0.5353 > ff02::fb.5353: 0*- [0q] 1/0/2 (Cache flush) A 192.168.1.108 (89) + 71 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? npP1x0025ED1D30B4.local. (41) + 72 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? npP1x0025ED1D7DB5.local. (41) + 73 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? npP1x0025ED1D8033.local. (41) + 74 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? nuvo.local. (28) + 75 IP 192.168.1.104.5353 > 224.0.0.251.5353: 0 A (QU)? nuvo.local. (28) + 76 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 311 + 77 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 311 + 78 IP 192.168.1.71.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.71 (38) + 79 IP 192.168.1.100.5353 > 224.0.0.251.5353: 0*- [0q] 5/0/0 (Cache flush) TXT "zoneTitle=Office" "buildVersion=" "friendlyVersion=Development build" "hwRevision=0" "model=P10" "MAC=00:25:ED:1D:30:B4" "updatePort=2847" "udpHttpPort=80" "serialNumber=", PTR v1-nvp1x0025ED1D30B4-dev0025ed1e4e0b-KT7OPjcb._nuvokeypad._tcp.local., (Cache flush) SRV npP1x0025ED1D30B4.local.:4747 0 0, (Cache flush) A 192.168.1.100, PTR _nuvokeypad._tcp.local. (352) + 80 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 81 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 64 + 82 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 83 IP 192.168.1.74.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.74 (38) + 84 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 85 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 86 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 87 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 364 + 88 IP 192.168.1.124.5353 > 224.0.0.251.5353: 0*- [0q] 5/0/0 (Cache flush) TXT "zoneTitle=Gym" "buildVersion=3c9e1cd2" "friendlyVersion=v2.2" "hwRevision=0" "model=P10" "MAC=00:25:ED:1D:80:33" "updatePort=2847" "udpHttpPort=80" "serialNumber=16162615", PTR v1-nvp1x0025ED1D8033-dev0025ed224e8c-hfpsWOo5._nuvokeypad._tcp.local., (Cache flush) SRV npP1x0025ED1D8033.local.:4747 0 0, (Cache flush) A 192.168.1.124, PTR _nuvokeypad._tcp.local. (352) + 89 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 90 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 91 IP 192.168.1.119.5353 > 224.0.0.251.5353: 0*- [0q] 5/0/0 (Cache flush) TXT "zoneTitle=Family Room" "buildVersion=3c9e1cd2" "friendlyVersion=v2.2" "hwRevision=0" "model=P10" "MAC=00:25:ED:1D:7D:B5" "updatePort=2847" "udpHttpPort=80" "serialNumber=16162612", PTR v1-nvp1x0025ED1D7DB5-dev0025ed1dcee8-eY5zugM7._nuvokeypad._tcp.local., (Cache flush) SRV npP1x0025ED1D7DB5.local.:4747 0 0, (Cache flush) A 192.168.1.119, PTR _nuvokeypad._tcp.local. (360) + 92 IP 192.168.1.75.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.75 (38) + 93 IP 192.168.1.76.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.76 (38) + 94 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 95 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 96 IP 192.168.1.73.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.73 (38) + 97 IP 192.168.1.70.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.70 (38) + 98 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 99 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 100 IP 192.168.1.16.46537 > 192.168.1.255.32414: UDP, length 21 + 101 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 102 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 103 IP 192.168.1.71.1900 > 239.255.255.250.1900: UDP, length 302 + 104 IP 192.168.1.76.1900 > 239.255.255.250.1900: UDP, length 302 + 105 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 106 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 107 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 108 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 109 STP 802.1s, Rapid STP, CIST Flags [Proposal, Learn, Forward, Agreement], length 102 + 110 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 311 + 111 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 112 IP 192.168.1.72.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 A 192.168.1.72 (38) + 113 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 114 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 115 IP 192.168.1.72.4777 > 239.255.133.141.4777: UDP, length 550 + 116 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 117 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 118 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 302 + 119 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 120 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 121 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 122 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 364 + 123 IP 192.168.1.71.40699 > 224.0.0.147.7401: UDP, length 194 + 124 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 311 + 125 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 126 IP 192.168.1.70.329 > 239.255.133.141.329: UDP, length 44 + 127 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 128 IP 192.168.1.75.1900 > 239.255.255.250.1900: UDP, length 302 + 129 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 130 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 131 IP 192.168.1.142.5353 > 224.0.0.251.5353: 0 A (QM)? ADM1.local. (28) + 132 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 133 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 134 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 135 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 136 IP 192.168.1.110.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.110 (47) + 137 IP 192.168.1.108.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.108 (47) + 138 IP 192.168.1.116.5353 > 224.0.0.251.5353: 0*- [0q] 1/0/0 (Cache flush) A 192.168.1.116 (47) + 139 IP 192.168.1.112.57648 > 72.21.91.29.80: Flags [.], ack 417025706, win 501, options [nop,nop,TS val 3563746208 ecr 2163093160], length 0 + 140 IP 192.168.1.112.57652 > 72.21.91.29.80: Flags [.], ack 835664479, win 501, options [nop,nop,TS val 3563746208 ecr 2416336260], length 0 + 141 IP 192.168.1.112.57660 > 72.21.91.29.80: Flags [.], ack 1396080866, win 501, options [nop,nop,TS val 3563746208 ecr 2163093160], length 0 + 142 IP 192.168.1.112.57662 > 72.21.91.29.80: Flags [.], ack 3374925911, win 501, options [nop,nop,TS val 3563746208 ecr 752039257], length 0 + 143 IP 72.21.91.29.80 > 192.168.1.112.57652: Flags [.], ack 1, win 131, options [nop,nop,TS val 2416346496 ecr 3563714312], length 0 + 144 IP 72.21.91.29.80 > 192.168.1.112.57648: Flags [.], ack 1, win 131, options [nop,nop,TS val 2163103395 ecr 3563714166], length 0 + 145 IP 72.21.91.29.80 > 192.168.1.112.57660: Flags [.], ack 1, win 131, options [nop,nop,TS val 2163103395 ecr 3563714162], length 0 + 146 IP 72.21.91.29.80 > 192.168.1.112.57662: Flags [.], ack 1, win 131, options [nop,nop,TS val 752049492 ecr 3563715869], length 0 + 147 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 148 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 149 IP 192.168.1.70.329 > 239.255.133.141.329: UDP, length 44 + 150 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 151 IP 192.168.1.76.55110 > 224.0.0.147.7401: UDP, length 194 + 152 IP 192.168.1.74.60464 > 224.0.0.147.7401: UDP, length 194 + 153 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 154 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 155 IP 192.168.1.112.48010 > 104.76.214.179.80: Flags [.], ack 2214160544, win 501, options [nop,nop,TS val 1209221338 ecr 2379647056], length 0 + 156 IP 192.168.1.112.53836 > 23.34.242.11.80: Flags [.], ack 2274783087, win 501, options [nop,nop,TS val 1860881977 ecr 281514817], length 0 + 157 IP 192.168.1.112.49706 > 18.67.79.46.80: Flags [.], ack 3496136908, win 501, options [nop,nop,TS val 3279530410 ecr 3843919618], length 0 + 158 IP 192.168.1.73.55278 > 224.0.0.147.7401: UDP, length 193 + 159 IP 104.76.214.179.80 > 192.168.1.112.48010: Flags [.], ack 1, win 501, options [nop,nop,TS val 2379657284 ecr 1209160126], length 0 + 160 IP 23.34.242.11.80 > 192.168.1.112.53836: Flags [.], ack 1, win 501, options [nop,nop,TS val 281525050 ecr 1860820777], length 0 + 161 IP 18.67.79.46.80 > 192.168.1.112.49706: Flags [.], ack 1, win 131, options [nop,nop,TS val 3843929850 ecr 3279438459], length 0 + 162 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 163 IP 192.168.1.73.4777 > 239.255.133.141.4777: UDP, length 543 + 164 IP 192.168.1.72.329 > 239.255.133.141.329: UDP, length 44 + 165 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 166 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 167 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 168 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 169 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 170 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 171 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 172 IP 192.168.1.75.53575 > 224.0.0.147.7401: UDP, length 194 + 173 IP 192.168.1.75.4777 > 239.255.133.141.4777: UDP, length 541 + 174 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 175 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 176 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 1652810799:1652810855, ack 2639829560, win 501, options [nop,nop,TS val 1817537674 ecr 2793912606], length 56 + 177 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 56:215, ack 1, win 501, options [nop,nop,TS val 1817537674 ecr 2793912606], length 159 + 178 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 215:271, ack 1, win 501, options [nop,nop,TS val 1817537674 ecr 2793912606], length 56 + 179 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 271:430, ack 1, win 501, options [nop,nop,TS val 1817537674 ecr 2793912606], length 159 + 180 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 430:486, ack 1, win 501, options [nop,nop,TS val 1817537676 ecr 2793912606], length 56 + 181 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [P.], seq 486:645, ack 1, win 501, options [nop,nop,TS val 1817537677 ecr 2793912606], length 159 + 182 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [P.], seq 1444687706:1444687816, ack 4288968344, win 4603, options [nop,nop,TS val 445851059 ecr 3689694683], length 110 + 183 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [.], ack 215, win 39096, options [nop,nop,TS val 2793918619 ecr 1817537674], length 0 + 184 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [.], ack 430, win 41992, options [nop,nop,TS val 2793918619 ecr 1817537674], length 0 + 185 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [.], ack 645, win 44888, options [nop,nop,TS val 2793918619 ecr 1817537676], length 0 + 186 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 1:22, ack 645, win 49232, options [nop,nop,TS val 2793918620 ecr 1817537676], length 21 + 187 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 22:158, ack 645, win 49232, options [nop,nop,TS val 2793918620 ecr 1817537676], length 136 + 188 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 158:196, ack 645, win 49956, options [nop,nop,TS val 2793918620 ecr 1817537676], length 38 + 189 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [.], ack 196, win 501, options [nop,nop,TS val 1817537701 ecr 2793918620], length 0 + 190 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 196:325, ack 645, win 49956, options [nop,nop,TS val 2793918620 ecr 1817537676], length 129 + 191 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 325:364, ack 645, win 50680, options [nop,nop,TS val 2793918620 ecr 1817537676], length 39 + 192 IP 75.75.77.2.443 > 192.168.1.112.48176: Flags [P.], seq 364:528, ack 645, win 50680, options [nop,nop,TS val 2793918621 ecr 1817537676], length 164 + 193 IP 192.168.1.112.48176 > 75.75.77.2.443: Flags [.], ack 528, win 501, options [nop,nop,TS val 1817537703 ecr 2793918620], length 0 + 194 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 1:2897, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 2896 + 195 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 2897, win 4648, options [nop,nop,TS val 445851097 ecr 3689722463], length 0 + 196 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 2897:8689, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 5792 + 197 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 8689, win 4739, options [nop,nop,TS val 445851098 ecr 3689722463], length 0 + 198 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 18729:25969, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 7240 + 199 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 8689, win 4852, options [nop,nop,TS val 445851098 ecr 3689722463,nop,nop,sack 1 {18729:25969}], length 0 + 200 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 25969:30313, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 4344 + 201 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 8689, win 4920, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:30313}], length 0 + 202 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 8689:11585, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 2896 + 203 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 11585, win 4965, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:30313}], length 0 + 204 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 30313:31761, ack 110, win 83, options [nop,nop,TS val 3689722464 ecr 445851059], length 1448 + 205 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 11585, win 4987, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:31761}], length 0 + 206 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 11585:13033, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 1448 + 207 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 13033, win 5010, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:31761}], length 0 + 208 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 31761:33209, ack 110, win 83, options [nop,nop,TS val 3689722464 ecr 445851059], length 1448 + 209 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 13033, win 5033, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:33209}], length 0 + 210 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 13033:14481, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 1448 + 211 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 14481, win 5055, options [nop,nop,TS val 445851099 ecr 3689722463,nop,nop,sack 1 {18729:33209}], length 0 + 212 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 14481:15833, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 1352 + 213 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 15833, win 5078, options [nop,nop,TS val 445851100 ecr 3689722463,nop,nop,sack 1 {18729:33209}], length 0 + 214 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 15833:17281, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 1448 + 215 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 17281, win 5101, options [nop,nop,TS val 445851100 ecr 3689722463,nop,nop,sack 1 {18729:33209}], length 0 + 216 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 33209:34776, ack 110, win 83, options [nop,nop,TS val 3689722464 ecr 445851059], length 1567 + 217 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 17281, win 5125, options [nop,nop,TS val 445851100 ecr 3689722463,nop,nop,sack 1 {18729:34776}], length 0 + 218 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 17281:18729, ack 110, win 83, options [nop,nop,TS val 3689722463 ecr 445851059], length 1448 + 219 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 34776, win 5148, options [nop,nop,TS val 445851100 ecr 3689722463], length 0 + 220 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 8689:15833, ack 110, win 83, options [nop,nop,TS val 3689722498 ecr 445851098], length 7144 + 221 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 34776, win 5148, options [nop,nop,TS val 445851131 ecr 3689722463,nop,nop,sack 1 {8689:15833}], length 0 + 222 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 15833:18729, ack 110, win 83, options [nop,nop,TS val 3689722503 ecr 445851099], length 2896 + 223 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 34776, win 5148, options [nop,nop,TS val 445851136 ecr 3689722463,nop,nop,sack 1 {15833:18729}], length 0 + 224 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 225 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 64 + 226 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 227 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [P.], seq 110:375, ack 34776, win 5148, options [nop,nop,TS val 445851220 ecr 3689722463], length 265 + 228 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 229 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 230 IP 192.168.1.112.59906 > 142.251.163.94.80: Flags [.], ack 2934425610, win 501, options [nop,nop,TS val 1097686862 ecr 3564558500], length 0 + 231 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 34776:36300, ack 375, win 83, options [nop,nop,TS val 3689722621 ecr 445851220], length 1524 + 232 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 36300, win 5172, options [nop,nop,TS val 445851253 ecr 3689722621], length 0 + 233 IP 142.251.163.94.80 > 192.168.1.112.59906: Flags [.], ack 1, win 286, options [nop,nop,TS val 3564568743 ecr 1097615412], length 0 + 234 STP 802.1s, Rapid STP, CIST Flags [Proposal, Learn, Forward, Agreement], length 102 + 235 IP 192.168.1.16.48381 > 239.255.255.250.1900: UDP, length 101 + 236 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [P.], seq 375:489, ack 36300, win 5172, options [nop,nop,TS val 445851341 ecr 3689722621], length 114 + 237 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 36300:47884, ack 489, win 83, options [nop,nop,TS val 3689722742 ecr 445851341], length 11584 + 238 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 47884, win 5353, options [nop,nop,TS val 445851375 ecr 3689722742], length 0 + 239 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 47884:52171, ack 489, win 83, options [nop,nop,TS val 3689722742 ecr 445851341], length 4287 + 240 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 52171, win 5419, options [nop,nop,TS val 445851376 ecr 3689722742], length 0 + 241 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 52171:59411, ack 489, win 83, options [nop,nop,TS val 3689722742 ecr 445851341], length 7240 + 242 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 59411, win 5464, options [nop,nop,TS val 445851376 ecr 3689722742], length 0 + 243 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 59411:60859, ack 489, win 83, options [nop,nop,TS val 3689722743 ecr 445851341], length 1448 + 244 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 60859, win 5455, options [nop,nop,TS val 445851376 ecr 3689722743], length 0 + 245 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 60859:66651, ack 489, win 83, options [nop,nop,TS val 3689722743 ecr 445851341], length 5792 + 246 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 66651, win 5495, options [nop,nop,TS val 445851377 ecr 3689722743], length 0 + 247 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 66651:69547, ack 489, win 83, options [nop,nop,TS val 3689722744 ecr 445851341], length 2896 + 248 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 69547, win 5479, options [nop,nop,TS val 445851377 ecr 3689722744], length 0 + 249 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [.], seq 69547:73891, ack 489, win 83, options [nop,nop,TS val 3689722744 ecr 445851341], length 4344 + 250 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 73891, win 5502, options [nop,nop,TS val 445851378 ecr 3689722744], length 0 + 251 IP 208.80.154.224.443 > 192.168.1.112.57350: Flags [P.], seq 73891:78407, ack 489, win 83, options [nop,nop,TS val 3689722745 ecr 445851341], length 4516 + 252 IP 192.168.1.112.57350 > 208.80.154.224.443: Flags [.], ack 78407, win 5474, options [nop,nop,TS val 445851378 ecr 3689722745], length 0 + 253 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 254 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 255 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 256 IP 192.168.1.70.60233 > 224.0.0.147.7401: UDP, length 194 + 257 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 258 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 259 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 260 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 261 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 262 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 263 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 264 IP 192.168.1.16.43110 > 192.168.1.255.32412: UDP, length 21 + 265 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 364 + 266 IP 192.168.1.70.329 > 239.255.133.141.329: UDP, length 44 + 267 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 268 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 269 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 270 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 311 + 271 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 272 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 273 IP 192.168.1.72.329 > 239.255.133.141.329: UDP, length 44 + 274 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 275 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 302 + 276 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 364 + 277 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 311 + 278 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 279 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 280 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 302 + 281 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 282 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 283 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 284 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 285 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 364 + 286 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 311 + 287 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 288 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 289 IP 192.168.1.70.1900 > 239.255.255.250.1900: UDP, length 302 + 290 IP 192.168.1.71.329 > 239.255.133.141.329: UDP, length 44 + 291 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 292 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 293 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 64 + 294 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 295 IP 192.168.1.76.329 > 239.255.133.141.329: UDP, length 44 + 296 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 297 STP 802.1s, Rapid STP, CIST Flags [Proposal, Learn, Forward, Agreement], length 102 + 298 IP 192.168.1.73.329 > 239.255.133.141.329: UDP, length 44 + 299 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 300 IP 192.168.1.72.35120 > 224.0.0.147.7401: UDP, length 193 + 301 IP 192.168.1.70.329 > 239.255.133.141.329: UDP, length 44 + 302 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 303 a4:13:4e:8c:64:20 > 01:01:c1:00:00:00, ethertype Unknown (0x9003), length 60: + 0x0000: 0100 dea3 8667 a413 4e8c 6420 0100 0300 .....g..N.d..... + 0x0010: 372f 5923 d290 96a5 0d3c 84fc 8040 918d 7/Y#.....<...@.. + 0x0020: 4f5d 1289 0000 0000 0000 0000 0000 O]............ + 304 ARP, Request who-has 192.168.1.222 tell 192.168.1.122, length 46 + 305 IP 192.168.1.112.38960 > 104.18.32.68.80: Flags [.], ack 2777470008, win 501, length 0 + 306 IP 192.168.1.112.38942 > 104.18.32.68.80: Flags [.], ack 988698847, win 501, length 0 + 307 IP 192.168.1.112.38946 > 104.18.32.68.80: Flags [.], ack 953550486, win 501, length 0 + 308 IP 192.168.1.112.38938 > 104.18.32.68.80: Flags [.], ack 1554158039, win 501, length 0 + 309 IP 192.168.1.112.38922 > 104.18.32.68.80: Flags [.], ack 3732908445, win 501, length 0 + 310 IP 104.18.32.68.80 > 192.168.1.112.38960: Flags [.], ack 1, win 8, length 0 + 311 IP 104.18.32.68.80 > 192.168.1.112.38942: Flags [.], ack 1, win 8, length 0 + 312 IP 104.18.32.68.80 > 192.168.1.112.38946: Flags [.], ack 1, win 8, length 0 + 313 IP 104.18.32.68.80 > 192.168.1.112.38938: Flags [.], ack 1, win 8, length 0 + 314 IP 104.18.32.68.80 > 192.168.1.112.38922: Flags [.], ack 1, win 8, length 0 + 315 IP 192.168.1.72.329 > 239.255.133.141.329: UDP, length 44 + 316 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 317 IP 192.168.1.72.329 > 239.255.133.141.329: UDP, length 44 + 318 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 319 IP 192.168.1.122.41100 > 255.255.255.255.41100: UDP, length 11 + 320 IP 192.168.1.74.1941 > 239.255.133.141.1941: UDP, length 332 + 321 IP 192.168.1.112.44384 > 172.253.115.94.80: Flags [.], ack 3911157370, win 501, options [nop,nop,TS val 3368674093 ecr 131684836], length 0 + 322 IP 172.253.115.94.80 > 192.168.1.112.44384: Flags [.], ack 1, win 261, options [nop,nop,TS val 131695077 ecr 3368582093], length 0 + 323 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 324 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + 325 IP 192.168.1.74.329 > 239.255.133.141.329: UDP, length 44 + 326 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 44 + 327 IP 192.168.1.16.46537 > 192.168.1.255.32414: UDP, length 21 + 328 IP 192.168.1.112.57664 > 72.21.91.29.80: Flags [.], ack 1520100536, win 501, options [nop,nop,TS val 3563750560 ecr 3530660795], length 0 + 329 IP 72.21.91.29.80 > 192.168.1.112.57664: Flags [.], ack 1, win 135, options [nop,nop,TS val 3530671036 ecr 3563718503], length 0 + 330 IP 192.168.1.75.329 > 239.255.133.141.329: UDP, length 44 + 331 IP 192.168.1.74.330 > 239.255.133.141.330: UDP, length 54 + +OVERVIEW +-------- +packets_captured: 331 +bytes_captured: 132951 +seconds: 7 +hours: 0.00 + +SRC DST PACKETS BYTES +192.168.1.73 239.255.133.141 7 1101 +192.168.1.74 239.255.133.141 69 8665 +192.168.1.112 34.107.221.82 1 66 +192.168.1.71 239.255.133.141 9 774 +34.107.221.82 192.168.1.112 1 66 +192.168.1.75 239.255.133.141 13 1615 +192.168.1.112 34.160.144.191 2 178 +34.160.144.191 192.168.1.112 2 178 +63.254.192.168 1.122.0.0 6 360 +192.168.1.142 224.0.0.251 2 140 +192.168.1.116 224.0.0.251 8 712 +192.168.1.112 192.168.100.1 2 200 +192.168.1.76 239.255.133.141 8 688 +192.168.1.108 224.0.0.251 9 843 +192.168.100.1 192.168.1.112 2 261 +192.168.1.110 224.0.0.251 8 712 +192.168.1.71 239.255.255.250 9 3309 +192.168.1.76 239.255.255.250 9 3309 +192.168.1.70 239.255.133.141 5 430 +1.0.3.0 12.244.31.84 1 60 +192.168.1.72 239.255.133.141 6 1022 +78.11.192.168 1.73.255.255 1 60 +192.168.1.75 239.255.255.250 9 3309 +192.168.1.122 255.255.255.255 2 120 +192.168.1.104 224.0.0.251 7 535 +0.0.0.0 255.157.127.146 1 151 +192.168.1.71 224.0.0.251 1 80 +192.168.1.100 224.0.0.251 1 394 +192.168.1.74 224.0.0.251 1 80 +192.168.1.124 224.0.0.251 1 394 +192.168.1.119 224.0.0.251 1 402 +192.168.1.75 224.0.0.251 1 80 +192.168.1.76 224.0.0.251 1 80 +192.168.1.73 224.0.0.251 1 80 +192.168.1.70 224.0.0.251 1 80 +192.168.1.16 192.168.1.255 3 189 +32.0.0.0 0.128.0.164 3 357 +192.168.1.72 224.0.0.251 1 80 +192.168.1.71 224.0.0.147 1 236 +192.168.1.112 72.21.91.29 5 330 +72.21.91.29 192.168.1.112 5 330 +192.168.1.76 224.0.0.147 1 236 +192.168.1.74 224.0.0.147 1 236 +192.168.1.112 104.76.214.179 1 66 +192.168.1.112 23.34.242.11 1 66 +192.168.1.112 18.67.79.46 1 66 +192.168.1.73 224.0.0.147 1 235 +104.76.214.179 192.168.1.112 1 66 +23.34.242.11 192.168.1.112 1 66 +18.67.79.46 192.168.1.112 1 66 +192.168.1.75 224.0.0.147 1 236 +192.168.1.112 75.75.77.2 8 1173 +192.168.1.112 208.80.154.224 27 2415 +75.75.77.2 192.168.1.112 9 1121 +208.80.154.224 192.168.1.112 24 90030 +192.168.1.112 142.251.163.94 1 66 +142.251.163.94 192.168.1.112 1 66 +192.168.1.16 239.255.255.250 1 143 +192.168.1.70 224.0.0.147 1 236 +192.168.1.70 239.255.255.250 9 3309 +192.168.1.72 224.0.0.147 1 235 +1.0.3.0 55.47.89.35 1 60 +192.168.1.112 104.18.32.68 5 270 +104.18.32.68 192.168.1.112 5 300 +192.168.1.112 172.253.115.94 1 66 +172.253.115.94 192.168.1.112 1 66 diff --git a/tests/overview3.out b/tests/overview3.out new file mode 100644 index 000000000..e69de29bb From 742aa8bbda9d9ead868657bc5c35acd7179ed52c Mon Sep 17 00:00:00 2001 From: Doug Camens Date: Fri, 3 Feb 2023 15:17:23 -0500 Subject: [PATCH 2/5] Update CHANGES, fix option numbering --- CHANGES | 2 ++ tcpdump.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index d9cf414a2..c7875f5f6 100644 --- a/CHANGES +++ b/CHANGES @@ -29,6 +29,8 @@ DayOfTheWeek, Month DD, YYYY / The Tcpdump Group Add --print-sampling to print every Nth packet instead of all. Print the supported time stamp types (-J) to stdout instead of stderr. Print the list of data link types (-L) to stdout instead of stderr. + Add --overview to print an overview of the contents of the capture + Add --no-print to suppress printing of individual packets (useful with --overview) Source code: Use %zu when printing a sizeof to squelch compiler warnings Remove unused missing/snprintf.c. diff --git a/tcpdump.c b/tcpdump.c index 9015f913d..f4bf28955 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -725,8 +725,8 @@ show_remote_devices_and_exit(void) #define OPTION_FP_TYPE 135 #define OPTION_COUNT 136 #define OPTION_PRINT_SAMPLING 137 -#define OPTION_OVERVIEW 137 -#define OPTION_NO_PRINT 138 +#define OPTION_OVERVIEW 138 +#define OPTION_NO_PRINT 139 static const struct option longopts[] = { #if defined(HAVE_PCAP_CREATE) || defined(_WIN32) From df245a258d86a5b43460d167456685e8b6cb434e Mon Sep 17 00:00:00 2001 From: Doug Camens Date: Fri, 3 Feb 2023 16:08:15 -0500 Subject: [PATCH 3/5] Fix unused parameter warning --- tcpdump.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tcpdump.c b/tcpdump.c index f4bf28955..dff64cf7b 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -1506,6 +1506,8 @@ open_interface(const char *device, netdissect_options *ndo, char *ebuf) static int no_printf(netdissect_options *ndo, const char *fmt, ...) { + ndo++; + fmt++; return (0); } From ec7683e0562862e0c1f14c23647012fb2bf87cae Mon Sep 17 00:00:00 2001 From: Doug Camens Date: Wed, 22 Feb 2023 16:21:19 -0500 Subject: [PATCH 4/5] Ignore ethertype other than 0x800 --- netdissect.h | 1 + print-ether.c | 4 ++++ tcpdump.c | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/netdissect.h b/netdissect.h index 804dd77a8..5a94b2efe 100644 --- a/netdissect.h +++ b/netdissect.h @@ -239,6 +239,7 @@ struct netdissect_options { const u_char *ndo_snapend; int ndo_dlt; /* datalink type */ + int ndo_length_type; /* */ /* stack of saved packet boundary and buffer information */ struct netdissect_saved_packet_info *ndo_packet_info_stack; diff --git a/print-ether.c b/print-ether.c index f0e314ae0..85a38ab93 100644 --- a/print-ether.c +++ b/print-ether.c @@ -193,6 +193,7 @@ ether_common_print(netdissect_options *ndo, const u_char *p, u_int length, */ recurse: length_type = GET_BE_U_2(p); + ndo->ndo_length_type = length_type; length -= 2; caplen -= 2; @@ -230,6 +231,7 @@ ether_common_print(netdissect_options *ndo, const u_char *p, u_int length, * Keep processing type/length fields. */ length_type = GET_BE_U_2(p); + ndo->ndo_length_type = length_type; ND_ICHECK_U(caplen, <, 2); length -= 2; @@ -274,6 +276,8 @@ ether_common_print(netdissect_options *ndo, const u_char *p, u_int length, } length_type = GET_BE_U_2(p + 2); + ndo->ndo_length_type = length_type; + p += 4; length -= 4; caplen -= 4; diff --git a/tcpdump.c b/tcpdump.c index dff64cf7b..e4aca60c0 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -3256,7 +3256,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) ndo = (netdissect_options*)user; - if (ndo->ndo_dlt == DLT_EN10MB) { + if (ndo->ndo_dlt == DLT_EN10MB && ndo->ndo_length_type == 0x800) { if (capture_start_time.tv_sec == 0) capture_start_time.tv_sec = h->ts.tv_sec; From 4e7c5e25a4765749eec936d4e731cbb8f3abf670 Mon Sep 17 00:00:00 2001 From: Doug Camens Date: Thu, 23 Feb 2023 13:57:39 +0000 Subject: [PATCH 5/5] Update overview test output to correspond with ethertype fix --- tests/overview1.out | 8 +------- tests/overview2.out | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/tests/overview1.out b/tests/overview1.out index d86f09003..60bfeb249 100644 --- a/tests/overview1.out +++ b/tests/overview1.out @@ -2,7 +2,7 @@ OVERVIEW -------- packets_captured: 331 -bytes_captured: 132951 +bytes_captured: 131903 seconds: 7 hours: 0.00 @@ -15,7 +15,6 @@ SRC DST PACKETS BYTES 192.168.1.75 239.255.133.141 13 1615 192.168.1.112 34.160.144.191 2 178 34.160.144.191 192.168.1.112 2 178 -63.254.192.168 1.122.0.0 6 360 192.168.1.142 224.0.0.251 2 140 192.168.1.116 224.0.0.251 8 712 192.168.1.112 192.168.100.1 2 200 @@ -26,13 +25,10 @@ SRC DST PACKETS BYTES 192.168.1.71 239.255.255.250 9 3309 192.168.1.76 239.255.255.250 9 3309 192.168.1.70 239.255.133.141 5 430 -1.0.3.0 12.244.31.84 1 60 192.168.1.72 239.255.133.141 6 1022 -78.11.192.168 1.73.255.255 1 60 192.168.1.75 239.255.255.250 9 3309 192.168.1.122 255.255.255.255 2 120 192.168.1.104 224.0.0.251 7 535 -0.0.0.0 255.157.127.146 1 151 192.168.1.71 224.0.0.251 1 80 192.168.1.100 224.0.0.251 1 394 192.168.1.74 224.0.0.251 1 80 @@ -43,7 +39,6 @@ SRC DST PACKETS BYTES 192.168.1.73 224.0.0.251 1 80 192.168.1.70 224.0.0.251 1 80 192.168.1.16 192.168.1.255 3 189 -32.0.0.0 0.128.0.164 3 357 192.168.1.72 224.0.0.251 1 80 192.168.1.71 224.0.0.147 1 236 192.168.1.112 72.21.91.29 5 330 @@ -68,7 +63,6 @@ SRC DST PACKETS BYTES 192.168.1.70 224.0.0.147 1 236 192.168.1.70 239.255.255.250 9 3309 192.168.1.72 224.0.0.147 1 235 -1.0.3.0 55.47.89.35 1 60 192.168.1.112 104.18.32.68 5 270 104.18.32.68 192.168.1.112 5 300 192.168.1.112 172.253.115.94 1 66 diff --git a/tests/overview2.out b/tests/overview2.out index 0da5b1ba3..a74e62c30 100644 --- a/tests/overview2.out +++ b/tests/overview2.out @@ -339,7 +339,7 @@ OVERVIEW -------- packets_captured: 331 -bytes_captured: 132951 +bytes_captured: 131903 seconds: 7 hours: 0.00 @@ -352,7 +352,6 @@ SRC DST PACKETS BYTES 192.168.1.75 239.255.133.141 13 1615 192.168.1.112 34.160.144.191 2 178 34.160.144.191 192.168.1.112 2 178 -63.254.192.168 1.122.0.0 6 360 192.168.1.142 224.0.0.251 2 140 192.168.1.116 224.0.0.251 8 712 192.168.1.112 192.168.100.1 2 200 @@ -363,13 +362,10 @@ SRC DST PACKETS BYTES 192.168.1.71 239.255.255.250 9 3309 192.168.1.76 239.255.255.250 9 3309 192.168.1.70 239.255.133.141 5 430 -1.0.3.0 12.244.31.84 1 60 192.168.1.72 239.255.133.141 6 1022 -78.11.192.168 1.73.255.255 1 60 192.168.1.75 239.255.255.250 9 3309 192.168.1.122 255.255.255.255 2 120 192.168.1.104 224.0.0.251 7 535 -0.0.0.0 255.157.127.146 1 151 192.168.1.71 224.0.0.251 1 80 192.168.1.100 224.0.0.251 1 394 192.168.1.74 224.0.0.251 1 80 @@ -380,7 +376,6 @@ SRC DST PACKETS BYTES 192.168.1.73 224.0.0.251 1 80 192.168.1.70 224.0.0.251 1 80 192.168.1.16 192.168.1.255 3 189 -32.0.0.0 0.128.0.164 3 357 192.168.1.72 224.0.0.251 1 80 192.168.1.71 224.0.0.147 1 236 192.168.1.112 72.21.91.29 5 330 @@ -405,7 +400,6 @@ SRC DST PACKETS BYTES 192.168.1.70 224.0.0.147 1 236 192.168.1.70 239.255.255.250 9 3309 192.168.1.72 224.0.0.147 1 235 -1.0.3.0 55.47.89.35 1 60 192.168.1.112 104.18.32.68 5 270 104.18.32.68 192.168.1.112 5 300 192.168.1.112 172.253.115.94 1 66