Wireshark-dev: [Wireshark-dev] [PATCH] Display TCP streams as Python strings
From: Jeremy Jethro <jjethro@xxxxxxxx>
Date: Fri, 15 Jun 2007 05:18:04 -0400
diff -Naur wireshark-0.99.5/gtk/follow_dlg.c wireshark-0.99.5-pkts2python/gtk/follow_dlg.c --- wireshark-0.99.5/gtk/follow_dlg.c 2007-02-01 17:55:20.000000000 -0500 +++ wireshark-0.99.5-pkts2python/gtk/follow_dlg.c 2007-06-14 16:06:28.000000000 -0400 @@ -87,6 +87,7 @@ SHOW_EBCDIC, SHOW_HEXDUMP, SHOW_CARRAY, + SHOW_PYTHONSTR, SHOW_RAW } show_type_t; @@ -99,6 +100,7 @@ GtkWidget *ebcdic_bt; GtkWidget *hexdump_bt; GtkWidget *carray_bt; + GtkWidget *pythonstr_bt; GtkWidget *raw_bt; GtkWidget *follow_save_as_w; #if GTK_MAJOR_VERSION >= 2 @@ -470,6 +472,19 @@ follow_info); follow_info->carray_bt = radio_bt; + /* Python string radio button */ + radio_bt = gtk_radio_button_new_with_label(gtk_radio_button_group + (GTK_RADIO_BUTTON(radio_bt)), + "Python String"); + gtk_tooltips_set_tip (tooltips, radio_bt, "Stream data output in \"Python String\" format", NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_bt), FALSE); + gtk_box_pack_start(GTK_BOX(hbox), radio_bt, FALSE, FALSE, 0); + SIGNAL_CONNECT(radio_bt, "toggled", follow_charset_toggle_cb, + follow_info); + follow_info->pythonstr_bt = radio_bt; + + + /* Raw radio button */ radio_bt = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON(radio_bt)), @@ -596,6 +611,8 @@ follow_info->show_type = SHOW_HEXDUMP; else if (w == follow_info->carray_bt) follow_info->show_type = SHOW_CARRAY; + else if (w == follow_info->pythonstr_bt) + follow_info->show_type = SHOW_PYTHONSTR; else if (w == follow_info->ascii_bt) follow_info->show_type = SHOW_ASCII; else if (w == follow_info->raw_bt) @@ -650,6 +667,9 @@ size_t nchars; static const gchar hexchars[16] = "0123456789abcdef"; + int issrvfirstline = 1; + int iscltfirstline = 1; + iplen = (follow_info->is_ipv6) ? 16 : 4; data_out_file = eth_fopen(follow_info->data_out_filename, "rb"); @@ -804,7 +824,71 @@ goto print_error; } break; + + case SHOW_PYTHONSTR: + + current_pos = 0; + issrvfirstline = 1; + iscltfirstline = 1; + + while (current_pos < nchars) { + gchar hexbuf[256]; + int i, cur; + + cur = 0; + + if (is_server && issrvfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_1_%d = ", server_packet_count); + if (is_server && !issrvfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_1_%d += ", server_packet_count); + + if (!is_server && iscltfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_0_%d = ", client_packet_count); + if (!is_server && !iscltfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_0_%d += ", client_packet_count); + + cur = strlen(hexbuf); + hexbuf[cur++] = '"'; + + for (i = 0; i < 8 && current_pos + i < nchars; i++) { + hexbuf[cur++] = '\\'; + hexbuf[cur++] = 'x'; + hexbuf[cur++] = + hexchars[(buffer[current_pos + i] & 0xf0) >> 4]; + hexbuf[cur++] = + hexchars[buffer[current_pos + i] & 0x0f]; + } + + current_pos += i; + (*global_pos) += i; + + hexbuf[cur++] = '"'; + hexbuf[cur++] = '\n'; + hexbuf[cur] = 0; + + if (!(*print_line) (hexbuf, strlen(hexbuf), is_server, arg)) + goto print_error; + + if (is_server) + issrvfirstline = 0; + else + iscltfirstline = 0; + + } + + if (is_server) + server_packet_count++; + else + client_packet_count++; + + break; + } + } } } diff -Naur wireshark-0.99.5/gtk/ssl-dlg.c wireshark-0.99.5-pkts2python/gtk/ssl-dlg.c --- wireshark-0.99.5/gtk/ssl-dlg.c 2007-02-01 17:55:13.000000000 -0500 +++ wireshark-0.99.5-pkts2python/gtk/ssl-dlg.c 2007-06-14 16:06:30.000000000 -0400 @@ -75,6 +75,7 @@ SHOW_ASCII, SHOW_HEXDUMP, SHOW_CARRAY, + SHOW_PYTHONSTR, SHOW_RAW } show_type_t; @@ -86,6 +87,7 @@ GtkWidget *ebcdic_bt; GtkWidget *hexdump_bt; GtkWidget *carray_bt; + GtkWidget *pythonstr_bt; GtkWidget *raw_bt; GtkWidget *follow_save_as_w; #if GTK_MAJOR_VERSION >= 2 @@ -453,6 +455,19 @@ follow_info); follow_info->carray_bt = radio_bt; + /* Python string radio button */ + radio_bt = gtk_radio_button_new_with_label(gtk_radio_button_group + (GTK_RADIO_BUTTON(radio_bt)), + "Python String"); + gtk_tooltips_set_tip (tooltips, radio_bt, + "Stream data output in \"Python String\" format", NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_bt), FALSE); + gtk_box_pack_start(GTK_BOX(hbox), radio_bt, FALSE, FALSE, 0); + SIGNAL_CONNECT(radio_bt, "toggled", follow_charset_toggle_cb, + follow_info); + follow_info->pythonstr_bt = radio_bt; + + /* Raw radio button */ radio_bt = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON(radio_bt)), @@ -576,6 +591,8 @@ follow_info->show_type = SHOW_HEXDUMP; else if (w == follow_info->carray_bt) follow_info->show_type = SHOW_CARRAY; + else if (w == follow_info->pythonstr_bt) + follow_info->show_type = SHOW_PYTHONSTR; else if (w == follow_info->ascii_bt) follow_info->show_type = SHOW_ASCII; else if (w == follow_info->raw_bt) @@ -625,6 +642,9 @@ static const gchar hexchars[16] = "0123456789abcdef"; GList* cur; + int issrvfirstline = 1; + int iscltfirstline = 1; + iplen = (follow_info->is_ipv6) ? 16 : 4; for (cur = follow_info->ssl_decrypted_data; cur; cur = g_list_next(cur)) { @@ -754,6 +774,68 @@ goto print_error; } break; + + case SHOW_PYTHONSTR: + + current_pos = 0; + issrvfirstline = 1; + iscltfirstline = 1; + + while (current_pos < nchars) { + gchar hexbuf[256]; + int i, cur; + + cur = 0; + + if (rec->is_server && issrvfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_1_%d = ", server_packet_count); + if (rec->is_server && !issrvfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_1_%d += ", server_packet_count); + + if (!rec->is_server && iscltfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_0_%d = ", client_packet_count); + if (!rec->is_server && !iscltfirstline) + g_snprintf(hexbuf, sizeof(hexbuf), + "peer_0_%d += ", client_packet_count); + + cur = strlen(hexbuf); + hexbuf[cur++] = '"'; + + for (i = 0; i < 8 && current_pos + i < nchars; i++) { + hexbuf[cur++] = '\\'; + hexbuf[cur++] = 'x'; + hexbuf[cur++] = + hexchars[(buffer[current_pos + i] & 0xf0) >> 4]; + hexbuf[cur++] = + hexchars[buffer[current_pos + i] & 0x0f]; + } + + current_pos += i; + (*global_pos) += i; + + hexbuf[cur++] = '"'; + hexbuf[cur++] = '\n'; + hexbuf[cur] = 0; + + if (!(*print_line) (hexbuf, strlen(hexbuf), rec->is_server, arg)) + goto print_error; + + if (rec->is_server) + issrvfirstline = 0; + else + iscltfirstline = 0; + } + + if (rec->is_server) + server_packet_count++; + else + client_packet_count++; + + break; + } } }
- Prev by Date: Re: [Wireshark-dev] Fwd: [PATCH] FTBP: ContentsTypeParameter andRelationship are OPTIONAL
- Next by Date: Re: [Wireshark-dev] Using pipes on Windows
- Previous by thread: Re: [Wireshark-dev] FW: [Wireshark-commits] rev 22100: /trunk/epan/dissectors/ /trunk/epan/dissectors/: packet-catapult-dct2000.c
- Next by thread: [Wireshark-dev] Problem with font - there are squers
- Index(es):