From b1c72a13d07b59fc67a7b338fa3969b96af7e67d Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 14 Apr 2008 00:47:37 -0400 Subject: [PATCH] comabug@gmail.com writes: net-tools' netstat should have a -W flag like FreeBSD. There is currently no way to get the full hostname from netstat for local/remote hostnames. http://bugs.gentoo.org/53731 --- man/en_US/netstat.8 | 3 +++ netstat.c | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/man/en_US/netstat.8 b/man/en_US/netstat.8 index e6be46b..9a3ff44 100644 --- a/man/en_US/netstat.8 +++ b/man/en_US/netstat.8 @@ -24,6 +24,7 @@ netstat \- Print network connections, routing tables, interface statistics, masq .RB [ \-\-all | \-a ] .RB [ \-\-numeric | \-n ] .RB [ \-\-numeric-hosts "] [" \-\-numeric-ports "] [" \-\-numeric-users ] +.RB [ \-\-wide | \-W] .RB [ \-\-symbolic | \-N ] .RB [ \-\-extend | \-e [ \-\-extend | \-e] ] .RB [ \-\-timers | \-o ] @@ -130,6 +131,8 @@ host or user names. .SS "\-\-numeric-users" shows numerical user IDs but does not affect the resolution of host or port names. +.SS "\-\-wide , \-W" +Don't truncate host names. .SS "\-\-protocol=\fIfamily \fR, \fB\-A" Specifies the address families (perhaps better described as low level diff --git a/netstat.c b/netstat.c index 843c06b..78bf551 100644 --- a/netstat.c +++ b/netstat.c @@ -150,6 +150,7 @@ int flag_exp = 1; int flag_prg = 0; int flag_arg = 0; int flag_ver = 0; +int flag_wid = 0; FILE *procinfo; @@ -780,7 +781,7 @@ static void tcp_do_one(int lnr, const char *line) get_sname(htons(local_port), "tcp", flag_not & FLAG_NUM_PORT)); - if ((strlen(local_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(local_addr) + strlen(buffer)) > 22)) local_addr[22 - strlen(buffer)] = '\0'; strcat(local_addr, ":"); @@ -789,7 +790,7 @@ static void tcp_do_one(int lnr, const char *line) snprintf(buffer, sizeof(buffer), "%s", get_sname(htons(rem_port), "tcp", flag_not & FLAG_NUM_PORT)); - if ((strlen(rem_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(rem_addr) + strlen(buffer)) > 22)) rem_addr[22 - strlen(buffer)] = '\0'; strcat(rem_addr, ":"); @@ -935,7 +936,7 @@ static void udp_do_one(int lnr, const char *line) snprintf(buffer, sizeof(buffer), "%s", get_sname(htons(local_port), "udp", flag_not & FLAG_NUM_PORT)); - if ((strlen(local_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(local_addr) + strlen(buffer)) > 22)) local_addr[22 - strlen(buffer)] = '\0'; strcat(local_addr, ":"); strncat(local_addr, buffer, sizeof(local_addr)); @@ -945,7 +946,7 @@ static void udp_do_one(int lnr, const char *line) get_sname(htons(rem_port), "udp", flag_not & FLAG_NUM_PORT)); safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr, flag_not & FLAG_NUM_HOST), sizeof(rem_addr)); - if ((strlen(rem_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(rem_addr) + strlen(buffer)) > 22)) rem_addr[22 - strlen(buffer)] = '\0'; strcat(rem_addr, ":"); strncat(rem_addr, buffer, sizeof(rem_addr)); @@ -1059,7 +1060,7 @@ static void raw_do_one(int lnr, const char *line) flag_not & FLAG_NUM_PORT)); safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr, flag_not & FLAG_NUM_HOST), sizeof(local_addr)); - if ((strlen(local_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(local_addr) + strlen(buffer)) > 22)) local_addr[22 - strlen(buffer)] = '\0'; strcat(local_addr, ":"); strncat(local_addr, buffer, sizeof(local_addr)); @@ -1069,7 +1070,7 @@ static void raw_do_one(int lnr, const char *line) get_sname(htons(rem_port), "raw", flag_not & FLAG_NUM_PORT)); safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr, flag_not & FLAG_NUM_HOST), sizeof(rem_addr)); - if ((strlen(rem_addr) + strlen(buffer)) > 22) + if (!flag_wid && ((strlen(rem_addr) + strlen(buffer)) > 22)) rem_addr[22 - strlen(buffer)] = '\0'; strcat(rem_addr, ":"); strncat(rem_addr, buffer, sizeof(rem_addr)); @@ -1531,6 +1532,7 @@ static void usage(void) fprintf(stderr, _(" --numeric-hosts don't resolve host names\n")); fprintf(stderr, _(" --numeric-ports don't resolve port names\n")); fprintf(stderr, _(" --numeric-users don't resolve user names\n")); + fprintf(stderr, _(" -W, --wide don't truncate host names\n")); fprintf(stderr, _(" -N, --symbolic resolve hardware names\n")); fprintf(stderr, _(" -e, --extend display other/more information\n")); fprintf(stderr, _(" -p, --programs display PID/Program name for sockets\n")); @@ -1580,6 +1582,7 @@ int main {"numeric-hosts", 0, 0, '!'}, {"numeric-ports", 0, 0, '@'}, {"numeric-users", 0, 0, '#'}, + {"wide", 0, 0, 'W'}, {"symbolic", 0, 0, 'N'}, {"cache", 0, 0, 'C'}, {"fib", 0, 0, 'F'}, @@ -1595,7 +1598,7 @@ int main getroute_init(); /* Set up AF routing support */ afname[0] = '\0'; - while ((i = getopt_long(argc, argv, "MCFA:acdegphinNorstuVv?wxl64", longopts, &lop)) != EOF) + while ((i = getopt_long(argc, argv, "MCFA:acdegphinWNorstuVv?wxl64", longopts, &lop)) != EOF) switch (i) { case -1: break; @@ -1651,6 +1654,9 @@ int main case '#': flag_not |= FLAG_NUM_USER; break; + case 'W': + flag_wid++; + break; case 'N': flag_not |= FLAG_SYM; break; -- 1.5.5