/* * print packet payload data (avoid printing binary data) */ void SNIFFER::print_payload(const u_char *payload, int len) { int len_rem = len; int line_width = 16; int line_len; int offset = 0; const u_char *ch = payload; if (len <= 0) return; if (len <= line_width) { print_hex_ascii_line(ch, len, offset); return; } for ( ;; ) { line_len = line_width % len_rem; print_hex_ascii_line(ch, line_len, offset); len_rem = len_rem - line_len; ch = ch + line_len; offset = offset + line_width; if (len_rem <= line_width) { print_hex_ascii_line(ch, len_rem, offset); break; } } return; }
/* * 打印包的有效载荷数据(避免打印二进制数据) * print packet payload data (avoid printing binary data) */ void print_payload(const u_char *payload, int len) { int len_rem = len; int line_width = 16; /* 每行的字节数 | number of bytes per line */ int line_len; int offset = 0; /* 从0开始的偏移计数器 | zero-based offset counter */ const u_char *ch = payload; if (len <= 0) return; /* data fits on one line */ if (len <= line_width) { print_hex_ascii_line(ch, len, offset); return; } /* 数据跨越多行 data spans multiple lines */ for ( ;; ) { /* 计算当前行的长度 | compute current line length */ line_len = line_width % len_rem; /* 显示分割线 | print line */ print_hex_ascii_line(ch, line_len, offset); /* 计算总剩余 | compute total remaining */ len_rem = len_rem - line_len; /* 转移到打印的剩余字节的指针 shift pointer to remaining bytes to print */ ch = ch + line_len; /* 添加偏移 | add offset */ offset = offset + line_width; /* 检查是否有线宽字符或更少 check if we have line width chars or less */ if (len_rem <= line_width) { /* print last line and get out */ print_hex_ascii_line(ch, len_rem, offset); break; } } return; }
void print_frame(const u_char *payload, int len) { PRINT_DEBUG("passed len = %d", len); int len_rem = len; int line_width = 16; /* number of bytes per line */ int line_len; int offset = 0; /* zero-based offset counter */ const u_char *ch = payload; if (len <= 0) return; /* data fits on one line */ if (len <= line_width) { PRINT_DEBUG("calling hex_ascii_line"); print_hex_ascii_line(ch, len, offset); return; } /* data spans multiple lines */ for ( ;; ) { /* compute current line length */ line_len = line_width % len_rem; /* print line */ print_hex_ascii_line(ch, line_len, offset); /* compute total remaining */ len_rem = len_rem - line_len; /* shift pointer to remaining bytes to print */ ch = ch + line_len; /* add offset */ offset = offset + line_width; /* check if we have line width chars or less */ if (len_rem <= line_width) { /* print last line and get out */ print_hex_ascii_line(ch, len_rem, offset); break; } } return; } // end of print_frame
/* * print packet payload data (avoid printing binary data) */ void print_payload(const u_char *payload, int len) { const u_char *ch = payload; int len_rem = len; int line_len; int offset = 0; /* zero-based offset counter */ int line_width = 16; /* number of bytes per line */ if (len < 1) return; /* data fits on one line */ if (len < line_width+1) { print_hex_ascii_line(ch, len, offset); return; } /* data spans multiple lines */ while(1) { /* compute current line length */ line_len = line_width % len_rem; /* print line */ print_hex_ascii_line(ch, line_len, offset); /* compute total remaining */ len_rem = len_rem - line_len; /* shift pointer to remaining bytes to print */ ch = ch + line_len; /* add offset */ offset = offset + line_width; /* check if we have line width chars or less */ if (len_rem < line_width+1) { /* print last line and get out */ print_hex_ascii_line(ch, len_rem, offset); break; } } return; }
void print_payload(const u_char *payload, int len) { int len_rem = len; int line_width = 16; int line_len; int offset = 0; const u_char *ch = payload; if (len <= 0) return; /* data fits on one line */ if (len <= line_width) { print_hex_ascii_line(ch, len, offset); return; } /* data spans multiple lines */ for ( ;; ) { /* compute current line length */ line_len = line_width % len_rem; /* print line */ print_hex_ascii_line(ch, line_len, offset); /* compute total remaining */ len_rem = len_rem - line_len; /* shift pointer to remaining bytes to print */ ch = ch + line_len; /* add offset */ offset = offset + line_width; /* check if we have line width chars or less */ if (len_rem <= line_width) { /* print last line and get out */ print_hex_ascii_line(ch, len_rem, offset); break; } } }
static void print_payload(const unsigned char *payload, int len) { int len_remain = len; int line_width = 16; int offset = 0; const unsigned char *line_start = payload; if (len <= 0) { return; } printf("---------------------- Payload ------------------------\n"); while (len_remain > line_width) { print_hex_ascii_line(line_start, line_width, offset); len_remain = len_remain - line_width; line_start = line_start + line_width; offset = offset + line_width; } print_hex_ascii_line(line_start, len_remain, offset); }