forked from osmocom/wireshark
Warren Young's patch to add a "Print" button to the "Follow TCP Stream"
data window. Some (belated) man page updates. svn path=/trunk/; revision=950
This commit is contained in:
parent
149c40fec9
commit
b99cfa28c8
4
AUTHORS
4
AUTHORS
|
@ -162,6 +162,10 @@ Uwe Girlich <Uwe.Girlich@philosys.de> {
|
|||
ONC RPC and NFS support
|
||||
}
|
||||
|
||||
Warren Young <tangent@mail.com> {
|
||||
"Print" button support in "Tools:Follow TCP Stream" window
|
||||
}
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to
|
||||
give his permission to use his version of snprintf.c.
|
||||
|
||||
|
|
|
@ -47,11 +47,13 @@ shows a summary line, briefly describing what the packet is. A protocol tree is
|
|||
you to drill down to exact protocol or field that you interested in. Finally, a hex dump
|
||||
shows you exactly what the packet looks like when it goes over the wire.
|
||||
|
||||
In addition, B<Ethereal> has some features that make it unique. It can assemble all
|
||||
the packets in a TCP conversation and show you the ASCII data in that conversation. Display
|
||||
filters in B<Ethereal> are very powerful; more fields are filterable in Ethereal than in other
|
||||
protocol analyzers, and the syntax you can use to create your filters is richer. As Ethereal
|
||||
progresses, expect more and more protocol fields to be allowed in display filters.
|
||||
In addition, B<Ethereal> has some features that make it unique. It can
|
||||
assemble all the packets in a TCP conversation and show you the ASCII
|
||||
(or EBCDIC) data in that conversation. Display filters in B<Ethereal>
|
||||
are very powerful; more fields are filterable in Ethereal than in other
|
||||
protocol analyzers, and the syntax you can use to create your filters is
|
||||
richer. As Ethereal progresses, expect more and more protocol fields to
|
||||
be allowed in display filters.
|
||||
|
||||
Packet capturing is performed with the pcap library. The capture filter syntax follows
|
||||
the rules of the pcap library. This syntax is different from the display filter syntax.
|
||||
|
@ -93,7 +95,8 @@ should match one of the names listed in "B<netstat -i>" or "B<ifconfig -a>".
|
|||
=item -k
|
||||
|
||||
Starts the capture session immediately; this option requires
|
||||
the B<-i> and B<-w> parameters.
|
||||
the B<-i> parameter, specifying the interface on which the capture
|
||||
should be done.
|
||||
|
||||
=item -m
|
||||
|
||||
|
@ -237,12 +240,18 @@ Expands all branches of the protocol tree.
|
|||
|
||||
=item Tools:Follow TCP Stream
|
||||
|
||||
If you have a TCP packet selected, it will display the contents of the TCP
|
||||
data stream in a separate window. This has the side-effect of leaving
|
||||
the list of packets in a filtered state; only those packets that make up
|
||||
the TCP stream are shown. You can revert to your old view by pressing
|
||||
ENTER in the display filter text box, thereby invoking your old
|
||||
display filter (or resetting it back to no display filter).
|
||||
If you have a TCP packet selected, it will display the contents of the
|
||||
data stream for the TCP connection to which that packet belongs, as
|
||||
text, in a separate window, and will leave the list of packets in a
|
||||
filtered state, with only those packets that are part of that TCP
|
||||
connection being displayed. You can revert to your old view by pressing
|
||||
ENTER in the display filter text box, thereby invoking your old display
|
||||
filter (or resetting it back to no display filter).
|
||||
|
||||
The window in which the data stream is displayed lets you select whether
|
||||
the data being displayed is to be treated as ASCII or EBCDIC text, and
|
||||
lets you print the text, using the same print options that are used for
|
||||
the I<File:Print Packet> menu item.
|
||||
|
||||
=back
|
||||
|
||||
|
@ -623,6 +632,7 @@ B<http://ethereal.zing.org>.
|
|||
Tomislav Vujec <tvujec@carnet.hr>
|
||||
Kojak <kojak@bigwig.net>
|
||||
Uwe Girlich <Uwe.Girlich@philosys.de>
|
||||
Warren Young <tangent@mail.com>
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
|
||||
permission to use his version of snprintf.c.
|
||||
|
|
72
gtk/main.c
72
gtk/main.c
|
@ -1,6 +1,6 @@
|
|||
/* main.c
|
||||
*
|
||||
* $Id: main.c,v 1.29 1999/10/29 01:04:44 guy Exp $
|
||||
* $Id: main.c,v 1.30 1999/10/30 06:41:51 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -118,6 +118,7 @@ static gint tree_selected_start=-1, tree_selected_len=-1;
|
|||
static void follow_destroy_cb(GtkWidget *win, gpointer data);
|
||||
static void follow_charset_toggle_cb(GtkWidget *w, gpointer parent_w);
|
||||
static void follow_load_text(GtkWidget *text, char *filename, gboolean show_ascii);
|
||||
static void follow_print_stream(GtkWidget *w, gpointer parent_w);
|
||||
|
||||
/* About Ethereal window */
|
||||
void
|
||||
|
@ -157,6 +158,7 @@ about_ethereal( GtkWidget *w, gpointer data ) {
|
|||
"Tomislav Vujec <tvujec@carnet.hr>\n"
|
||||
"Kojak <kojak@bigwig.net>\n"
|
||||
"Uwe Girlich <Uwe.Girlich@philosys.de>\n"
|
||||
"Warren Young <tangent@mail.com>\n"
|
||||
|
||||
"\nSee http://ethereal.zing.org for more information",
|
||||
VERSION, comp_info_str);
|
||||
|
@ -169,7 +171,7 @@ void
|
|||
follow_stream_cb( GtkWidget *w, gpointer data ) {
|
||||
char filename1[128+1];
|
||||
GtkWidget *streamwindow, *box, *text, *vscrollbar, *table;
|
||||
GtkWidget *hbox, *close_bt, *button;
|
||||
GtkWidget *hbox, *close_bt, *print_bt, *button;
|
||||
int tmp_fd;
|
||||
gchar *follow_filter;
|
||||
|
||||
|
@ -282,6 +284,13 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
|
|||
gtk_box_pack_end( GTK_BOX(hbox), close_bt, FALSE, FALSE, 0);
|
||||
gtk_widget_show( close_bt );
|
||||
|
||||
/* Create Print Button */
|
||||
print_bt = gtk_button_new_with_label("Print");
|
||||
gtk_signal_connect(GTK_OBJECT(print_bt), "clicked",
|
||||
GTK_SIGNAL_FUNC(follow_print_stream),
|
||||
GTK_OBJECT(streamwindow));
|
||||
gtk_box_pack_end( GTK_BOX(hbox), print_bt, FALSE, FALSE, 0);
|
||||
gtk_widget_show( print_bt );
|
||||
|
||||
/* create the scrollbar */
|
||||
vscrollbar = gtk_vscrollbar_new( GTK_TEXT(text)->vadj );
|
||||
|
@ -350,6 +359,65 @@ follow_charset_toggle_cb(GtkWidget *w, gpointer parent_w)
|
|||
follow_load_text(text, filename, show_ascii);
|
||||
}
|
||||
|
||||
static void follow_print_stream(GtkWidget *w, gpointer parent_w)
|
||||
{
|
||||
FILE *fh = NULL;
|
||||
int to_file = -1;
|
||||
char* print_dest = NULL;
|
||||
char* filename;
|
||||
|
||||
switch (prefs.pr_dest) {
|
||||
case PR_DEST_CMD:
|
||||
print_dest = prefs.pr_cmd;
|
||||
to_file = FALSE;
|
||||
break;
|
||||
|
||||
case PR_DEST_FILE:
|
||||
print_dest = prefs.pr_file;
|
||||
to_file = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (print_dest != NULL) {
|
||||
fh = open_print_dest(to_file, print_dest);
|
||||
}
|
||||
|
||||
if (fh == NULL) {
|
||||
switch (to_file) {
|
||||
case -1:
|
||||
simple_dialog(ESD_TYPE_WARN, NULL,
|
||||
"Couldn't figure out where to send the print "
|
||||
"job. Check your preferences.");
|
||||
break;
|
||||
|
||||
case FALSE:
|
||||
simple_dialog(ESD_TYPE_WARN, NULL,
|
||||
"Couldn't run print command %s.", prefs.pr_cmd);
|
||||
break;
|
||||
|
||||
case TRUE:
|
||||
simple_dialog(ESD_TYPE_WARN, NULL,
|
||||
file_write_error_message(errno),
|
||||
prefs.pr_file);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
filename = (char*) gtk_object_get_data(GTK_OBJECT(parent_w),
|
||||
E_FOLLOW_FILENAME_KEY);
|
||||
|
||||
if (filename != NULL) {
|
||||
print_preamble(fh);
|
||||
print_file(fh, filename);
|
||||
print_finale(fh);
|
||||
close_print_dest(to_file, fh);
|
||||
}
|
||||
else {
|
||||
simple_dialog(ESD_TYPE_WARN, NULL, "Could not find data to print.");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
follow_load_text(GtkWidget *text, char *filename, gboolean show_ascii)
|
||||
{
|
||||
|
|
40
print.c
40
print.c
|
@ -1,7 +1,7 @@
|
|||
/* print.c
|
||||
* Routines for printing packet analysis trees.
|
||||
*
|
||||
* $Id: print.c,v 1.21 1999/09/29 22:19:13 guy Exp $
|
||||
* $Id: print.c,v 1.22 1999/10/30 06:41:36 guy Exp $
|
||||
*
|
||||
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
|
||||
*
|
||||
|
@ -47,6 +47,8 @@ static void proto_tree_print_node_ps(GNode *node, gpointer data);
|
|||
static void ps_clean_string(unsigned char *out, const unsigned char *in,
|
||||
int outbuf_size);
|
||||
static void print_hex_data_ps(FILE *fh, register const u_char *cp, register u_int length);
|
||||
static void print_ps_file(FILE* target_fh, FILE* source_fh);
|
||||
static void print_text_file(FILE* target_fh, FILE* source_fh);
|
||||
|
||||
extern int proto_data; /* in packet-data.c */
|
||||
|
||||
|
@ -93,6 +95,20 @@ void print_finale(FILE *fh)
|
|||
print_ps_finale(fh);
|
||||
}
|
||||
|
||||
void print_file(FILE* fh, const char* filename)
|
||||
{
|
||||
FILE* fh2 = fopen(filename, "r");
|
||||
if (fh2 == NULL) {
|
||||
fprintf(stderr, "Could not open file %s for reading.\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
if (prefs.pr_format == PR_FMT_PS)
|
||||
print_ps_file(fh, fh2);
|
||||
else
|
||||
print_text_file(fh, fh2);
|
||||
}
|
||||
|
||||
void proto_tree_print(gboolean print_one_packet, print_args_t *print_args,
|
||||
GNode *protocol_tree, const u_char *pd, frame_data *fd, FILE *fh)
|
||||
{
|
||||
|
@ -317,3 +333,25 @@ void print_hex_data_ps(FILE *fh, register const u_char *cp, register u_int lengt
|
|||
return;
|
||||
|
||||
}
|
||||
|
||||
static
|
||||
void print_text_file(FILE* target_fh, FILE* source_fh)
|
||||
{
|
||||
gchar buffer[MAX_LINE_LENGTH];
|
||||
while (fgets(buffer, sizeof(buffer), source_fh) != NULL) {
|
||||
fputs(buffer, target_fh);
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void print_ps_file(FILE* target_fh, FILE* source_fh)
|
||||
{
|
||||
gchar buffer[MAX_LINE_LENGTH];
|
||||
gchar ps_buffer[MAX_LINE_LENGTH];
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), source_fh) != NULL) {
|
||||
ps_clean_string(ps_buffer, buffer, MAX_LINE_LENGTH);
|
||||
fputs(ps_buffer, target_fh);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
3
print.h
3
print.h
|
@ -1,7 +1,7 @@
|
|||
/* print.h
|
||||
* Definitions for printing packet analysis trees.
|
||||
*
|
||||
* $Id: print.h,v 1.13 1999/09/29 22:19:13 guy Exp $
|
||||
* $Id: print.h,v 1.14 1999/10/30 06:41:36 guy Exp $
|
||||
*
|
||||
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
|
||||
*
|
||||
|
@ -46,6 +46,7 @@ FILE *open_print_dest(int to_file, const char *dest);
|
|||
void close_print_dest(int to_file, FILE *fh);
|
||||
void print_preamble(FILE *fh);
|
||||
void print_finale(FILE *fh);
|
||||
void print_file(FILE* fh, const char* filename);
|
||||
void proto_tree_print(gboolean print_one_packet, print_args_t *print_args,
|
||||
GNode *protocol_tree, const u_char *pd, frame_data *fd, FILE *fh);
|
||||
void print_hex_data(FILE *fh, register const u_char *cp,
|
||||
|
|
Loading…
Reference in New Issue