Ethereal-dev: [Ethereal-dev] Better control for name resolving (patch for tethereal)
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Joerg Mayer <jmayer@xxxxxxxxx>
Date: Tue, 8 May 2001 21:49:53 +0200
attached patch impelements some better control for name resolving with tethereal. As I don't know how to program gtk buttons (or anything graphical :-) this patch is *t*ethereal only. I've made some adjustments to ethereal which I hope are OK. The new option is -N<flags> where flags are the following: m (resolve Mac vendor id), n (resolve network address), t (resolve trans- port address). If someone will provide the buttons, I'll be happy to basically copy the missing patches for commandline handling and manpage from tethereal to ethereal. Ciao Jörg -- Joerg Mayer <jmayer@xxxxxxxxx> I found out that "pro" means "instead of" (as in proconsul). Now I know what proactive means.
Index: ethereal/prefs.c =================================================================== RCS file: /cvsroot/ethereal/prefs.c,v retrieving revision 1.50 diff -u -u -r1.50 prefs.c --- prefs.c 2001/04/15 03:37:13 1.50 +++ prefs.c 2001/05/08 00:37:29 @@ -615,7 +615,7 @@ prefs.capture_prom_mode = 0; prefs.capture_real_time = 0; prefs.capture_auto_scroll = 0; - prefs.name_resolve= 1; + prefs.name_resolve= PREFS_RESOLV_ALL; } @@ -1011,7 +1011,7 @@ } else if (strcmp(pref_name, PRS_NAME_RESOLVE) == 0 || strcmp(pref_name, PRS_CAP_NAME_RESOLVE) == 0) { - prefs.name_resolve = ((strcmp(value, "TRUE") == 0)?TRUE:FALSE); + prefs.name_resolve = ((strcmp(value, "TRUE") == 0)?PREFS_RESOLV_ALL:PREFS_RESOLV_NONE); } else { /* To which module does this preference belong? */ @@ -1339,7 +1339,7 @@ fprintf(pf, "\n# Resolve addresses to names? TRUE/FALSE\n"); fprintf(pf, PRS_NAME_RESOLVE ": %s\n", - prefs.name_resolve == TRUE ? "TRUE" : "FALSE"); + prefs.name_resolve == PREFS_RESOLV_ALL ? "TRUE" : "FALSE"); /* write the capture options */ fprintf(pf, "\n# Capture in promiscuous mode? TRUE/FALSE\n"); Index: ethereal/prefs.h =================================================================== RCS file: /cvsroot/ethereal/prefs.h,v retrieving revision 1.29 diff -u -u -r1.29 prefs.h --- prefs.h 2001/04/15 03:37:13 1.29 +++ prefs.h 2001/05/08 00:37:29 @@ -33,6 +33,15 @@ #define PR_DEST_CMD 0 #define PR_DEST_FILE 1 +/* 31 types are sufficient (as are 640k of RAM) */ +/* FIXME: Maybe MANUF/m, IP/i, IP6/6, IPX/x, UDP+TCP/t etc would be + more useful/consistent */ +#define PREFS_RESOLV_NONE 0x0 +#define PREFS_RESOLV_MAC 0x1 +#define PREFS_RESOLV_NETWORK 0x2 +#define PREFS_RESOLV_TRANSPORT 0x4 +#define PREFS_RESOLV_ALL 0xFFFFFFFF + typedef struct _e_prefs { gint pr_format; gint pr_dest; @@ -50,7 +59,7 @@ gchar *gui_font_name; color_t gui_marked_fg; color_t gui_marked_bg; - gboolean name_resolve; + gint name_resolve; gboolean capture_prom_mode; gboolean capture_real_time; gboolean capture_auto_scroll; Index: ethereal/tethereal.c =================================================================== RCS file: /cvsroot/ethereal/tethereal.c,v retrieving revision 1.82 diff -u -u -r1.82 tethereal.c --- tethereal.c 2001/04/20 21:50:06 1.82 +++ tethereal.c 2001/05/08 00:37:31 @@ -336,7 +336,7 @@ #endif /* Now get our args */ - while ((opt = getopt(argc, argv, "c:Df:F:hi:lno:pr:R:s:t:vw:Vx")) != EOF) { + while ((opt = getopt(argc, argv, "c:Df:F:hi:lnN:o:pr:R:s:t:vw:Vx")) != EOF) { switch (opt) { case 'c': /* Capture xxx packets */ #ifdef HAVE_LIBPCAP @@ -417,8 +417,30 @@ line_buffered = TRUE; break; case 'n': /* No name resolution */ - prefs->name_resolve = 0; + prefs->name_resolve = PREFS_RESOLV_NONE; break; + case 'N': /* No name resolution */ + if (prefs->name_resolve == PREFS_RESOLV_ALL) { + prefs->name_resolve = PREFS_RESOLV_NONE; + } + for (; *optarg; optarg++) { + switch (*optarg) { + case 'm': + prefs->name_resolve |= PREFS_RESOLV_MAC; + break; + case 'n': + prefs->name_resolve |= PREFS_RESOLV_NETWORK; + break; + case 't': + prefs->name_resolve |= PREFS_RESOLV_TRANSPORT; + break; + default: + fprintf(stderr, "tethereal: -N specifies unknown resolving option '%c', valid are: m,n,t\n", + *optarg); + exit(1); + } + } + break; case 'o': /* Override preference from command line */ switch (prefs_set_pref(optarg)) { Index: ethereal/doc/tethereal.pod.template =================================================================== RCS file: /cvsroot/ethereal/doc/tethereal.pod.template,v retrieving revision 1.27 diff -u -u -r1.27 tethereal.pod.template --- tethereal.pod.template 2001/03/27 06:16:11 1.27 +++ tethereal.pod.template 2001/05/08 00:37:32 @@ -14,6 +14,7 @@ S<[ B<-i> interface ]> S<[ B<-l> ]> S<[ B<-n> ]> +S<[ B<-N> resolving flags ] ...> S<[ B<-o> preference setting ] ...> S<[ B<-p> ]> S<[ B<-r> infile ]> @@ -162,6 +163,12 @@ Disables network object name resolution (such as hostname, TCP and UDP port names). + +=item -N + +Flags to turn on specific name resolving for MAC B<m>, network B<n> and +transport B<t> layer addresses. This overrides -n if both -N and -n are +present. =item -o Index: ethereal/epan/resolv.c =================================================================== RCS file: /cvsroot/ethereal/epan/resolv.c,v retrieving revision 1.9 diff -u -u -r1.9 resolv.c --- resolv.c 2001/04/15 03:37:15 1.9 +++ resolv.c 2001/05/08 00:37:33 @@ -220,7 +220,7 @@ tp->addr = port; tp->next = NULL; - if (!prefs.name_resolve || + if (!(prefs.name_resolve & PREFS_RESOLV_TRANSPORT) || (servp = getservbyport(htons(port), serv_proto)) == NULL) { /* unknown port */ sprintf(tp->name, "%d", port); @@ -279,7 +279,7 @@ tp->addr = addr; tp->next = NULL; - if (prefs.name_resolve) { + if (prefs.name_resolve & PREFS_RESOLV_NETWORK) { #ifdef AVOID_DNS_TIMEOUT /* Quick hack to avoid DNS/YP timeout */ @@ -319,7 +319,7 @@ #ifdef INET6 struct hostent *hostp; - if (prefs.name_resolve) { + if (prefs.name_resolve & PREFS_RESOLV_NETWORK) { #ifdef AVOID_DNS_TIMEOUT /* Quick hack to avoid DNS/YP timeout */ @@ -1036,7 +1036,7 @@ { gboolean found; - if (!prefs.name_resolve) + if (!(prefs.name_resolve & PREFS_RESOLV_NETWORK)) return ip_to_str((guint8 *)&addr); return host_name_lookup(addr, &found); @@ -1047,7 +1047,7 @@ gboolean found; #ifdef INET6 - if (!prefs.name_resolve) + if (!(prefs.name_resolve & PREFS_RESOLV_NETWORK)) return ip6_to_str(addr); if (IN6_IS_ADDR_LINKLOCAL(addr) || IN6_IS_ADDR_MULTICAST(addr)) return ip6_to_str(addr); @@ -1100,7 +1100,7 @@ static gchar str[3][MAXNAMELEN]; static gchar *cur; - if (!prefs.name_resolve) { + if (!(prefs.name_resolve & PREFS_RESOLV_TRANSPORT)) { if (cur == &str[0][0]) { cur = &str[1][0]; } else if (cur == &str[1][0]) { @@ -1121,7 +1121,7 @@ static gchar str[3][MAXNAMELEN]; static gchar *cur; - if (!prefs.name_resolve) { + if (!(prefs.name_resolve & PREFS_RESOLV_TRANSPORT)) { if (cur == &str[0][0]) { cur = &str[1][0]; } else if (cur == &str[1][0]) { @@ -1142,7 +1142,7 @@ static gchar str[3][MAXNAMELEN]; static gchar *cur; - if (!prefs.name_resolve) { + if (!(prefs.name_resolve & PREFS_RESOLV_TRANSPORT)) { if (cur == &str[0][0]) { cur = &str[1][0]; } else if (cur == &str[1][0]) { @@ -1160,7 +1160,7 @@ extern guchar *get_ether_name(const guint8 *addr) { - if (!prefs.name_resolve) + if (!(prefs.name_resolve & PREFS_RESOLV_MAC)) return ether_to_str((guint8 *)addr); if (!eth_resolution_initialized) { @@ -1184,7 +1184,7 @@ /* Initialize ether structs if we're the first * ether-related function called */ - if (!prefs.name_resolve) + if (!(prefs.name_resolve & PREFS_RESOLV_MAC)) return NULL; if (!eth_resolution_initialized) { @@ -1268,7 +1268,7 @@ extern const guchar *get_ipxnet_name(const guint32 addr) { - if (!prefs.name_resolve) { + if (!(prefs.name_resolve & PREFS_RESOLV_NETWORK)) { return ipxnet_to_str_punct(addr, '\0'); } @@ -1306,12 +1306,12 @@ static gchar *cur; hashmanuf_t *manufp; - if (prefs.name_resolve && !eth_resolution_initialized) { + if ((prefs.name_resolve & PREFS_RESOLV_MAC) && !eth_resolution_initialized) { initialize_ethers(); eth_resolution_initialized = 1; } - if (!prefs.name_resolve || ((manufp = manuf_name_lookup(addr)) == NULL)) { + if (!(prefs.name_resolve & PREFS_RESOLV_MAC) || ((manufp = manuf_name_lookup(addr)) == NULL)) { if (cur == &str[0][0]) { cur = &str[1][0]; } else if (cur == &str[1][0]) { Index: ethereal/gtk/capture_dlg.c =================================================================== RCS file: /cvsroot/ethereal/gtk/capture_dlg.c,v retrieving revision 1.41 diff -u -u -r1.41 capture_dlg.c --- capture_dlg.c 2001/04/15 03:37:16 1.41 +++ capture_dlg.c 2001/05/08 00:37:34 @@ -502,7 +502,7 @@ prefs.capture_auto_scroll = GTK_TOGGLE_BUTTON (auto_scroll_cb)->active; - prefs.name_resolve = GTK_TOGGLE_BUTTON (resolv_cb)->active; + prefs.name_resolve = (GTK_TOGGLE_BUTTON (resolv_cb)->active ? PREFS_RESOLV_ALL : PREFS_RESOLV_NONE); gtk_widget_destroy(GTK_WIDGET(parent_w)); Index: ethereal/gtk/display_opts.c =================================================================== RCS file: /cvsroot/ethereal/gtk/display_opts.c,v retrieving revision 1.20 diff -u -u -r1.20 display_opts.c --- display_opts.c 2001/04/15 03:37:16 1.20 +++ display_opts.c 2001/05/08 00:37:34 @@ -269,7 +269,7 @@ button = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_DISPLAY_NAME_RESOLUTION_KEY); - prefs.name_resolve = (GTK_TOGGLE_BUTTON (button)->active); + prefs.name_resolve = (GTK_TOGGLE_BUTTON (button)->active ? PREFS_RESOLV_ALL : PREFS_RESOLV_NONE); } Index: ethereal/gtk/main.c =================================================================== RCS file: /cvsroot/ethereal/gtk/main.c,v retrieving revision 1.198 diff -u -u -r1.198 main.c --- main.c 2001/05/01 00:41:46 1.198 +++ main.c 2001/05/08 00:37:36 @@ -539,8 +539,8 @@ void resolve_name_cb(GtkWidget *widget, gpointer data) { if (cfile.protocol_tree) { - int tmp = prefs.name_resolve; - prefs.name_resolve = 1; + gint tmp = prefs.name_resolve; + prefs.name_resolve = PREFS_RESOLV_ALL; gtk_clist_clear ( GTK_CLIST(tree_view) ); proto_tree_draw(cfile.protocol_tree, tree_view); prefs.name_resolve = tmp; @@ -1035,7 +1035,7 @@ prefs->gui_font_name = g_strdup(optarg); break; case 'n': /* No name resolution */ - prefs->name_resolve = 0; + prefs->name_resolve = PREFS_RESOLV_NONE; break; case 'o': /* Override preference from command line */ switch (prefs_set_pref(optarg)) {
- Prev by Date: Re: [Ethereal-dev] Patch for LDAP no MessageID bug
- Next by Date: Re: [Ethereal-dev] Patch for -R command line handling
- Previous by thread: Re: [Ethereal-dev] Patch for -R command line handling
- Next by thread: [Ethereal-dev] win 32 donwload source code
- Index(es):