Date: 17 Aug 2000 12:25:07 -0000 From: Peter Pentchev <roam@orbitel.bg> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/20681: [PATCH] show service names in netstat and sockstat Message-ID: <20000817122507.1415.qmail@ringwraith.office1>
next in thread | raw e-mail | index | archive | help
>Number: 20681 >Category: bin >Synopsis: [PATCH] show service names in netstat and sockstat >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Aug 17 05:40:01 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Peter Pentchev <roam@orbitel.bg> >Release: FreeBSD 4.1-STABLE i386 >Organization: Orbitel JSCo >Environment: Diffs against RELENG_4, probably easy to port to other releases. >Description: Sometimes it is helpful to be able to see port numbers resolved to service names without attempting to resolve host and network addresses. The attached patch adds a -S flag to netstat, which overrides the -n flag for service names (hosts and networks are still shown numerically). Also included is a trivial patch to the sockstat Perl script, which makes use of the netstat -S flag, showing service names in sockstat, which was the whole reason I started doing this at all :) >How-To-Repeat: N/A >Fix: diff -u -urN src/usr.bin/netstat/inet.c mysrc/usr.bin/netstat/inet.c --- src/usr.bin/netstat/inet.c Thu Jul 20 19:38:54 2000 +++ mysrc/usr.bin/netstat/inet.c Thu Aug 17 14:57:27 2000 @@ -695,7 +695,7 @@ sprintf(line, "%.*s.", (Aflag && !numeric) ? 12 : 16, inetname(in)); cp = index(line, '\0'); - if (!numeric && port) + if ((Sflag || !numeric) && port) sp = getservbyport((int)port, proto); if (sp || port == 0) sprintf(cp, "%.15s", sp ? sp->s_name : "*"); diff -u -urN src/usr.bin/netstat/inet6.c mysrc/usr.bin/netstat/inet6.c --- src/usr.bin/netstat/inet6.c Tue Aug 8 16:33:35 2000 +++ mysrc/usr.bin/netstat/inet6.c Thu Aug 17 14:59:40 2000 @@ -992,7 +992,7 @@ sprintf(line, "%.*s.", lflag ? 39 : (Aflag && !numeric) ? 12 : 16, inet6name(in6)); cp = index(line, '\0'); - if (!numeric && port) + if ((Sflag || !numeric) && port) GETSERVBYPORT6(port, proto, sp); if (sp || port == 0) sprintf(cp, "%.8s", sp ? sp->s_name : "*"); diff -u -urN src/usr.bin/netstat/iso.c mysrc/usr.bin/netstat/iso.c --- src/usr.bin/netstat/iso.c Mon Sep 6 10:34:27 1999 +++ mysrc/usr.bin/netstat/iso.c Thu Aug 17 15:00:51 2000 @@ -435,7 +435,7 @@ *cp++ = '.'; if(sufxlen) { - if( !Aflag && !nflag && (ihe=iso_getserventrybytsel(sufx, sufxlen))) { + if( !Aflag && (Sflag || !nflag) && (ihe=iso_getserventrybytsel(sufx, sufxlen))) { Ihe = *ihe; ihe = &Ihe; } diff -u -urN src/usr.bin/netstat/main.c mysrc/usr.bin/netstat/main.c --- src/usr.bin/netstat/main.c Thu Jul 20 19:38:58 2000 +++ mysrc/usr.bin/netstat/main.c Thu Aug 17 15:01:46 2000 @@ -302,7 +302,7 @@ af = AF_UNSPEC; - while ((ch = getopt(argc, argv, "Aabdf:ghI:lLiM:mN:np:rstuw:")) != -1) + while ((ch = getopt(argc, argv, "Aabdf:ghI:lLiM:mN:np:rSstuw:")) != -1) switch(ch) { case 'A': Aflag = 1; @@ -393,6 +393,9 @@ case 'r': rflag = 1; break; + case 'S': + Sflag = 1; + break; case 's': ++sflag; break; @@ -696,8 +699,8 @@ usage() { (void)fprintf(stderr, "%s\n%s\n%s\n%s\n", -"usage: netstat [-AaLln] [-f address_family] [-M core] [-N system]", -" netstat [-abdghilmnrs] [-f address_family] [-M core] [-N system]", +"usage: netstat [-AaLlnS] [-f address_family] [-M core] [-N system]", +" netstat [-abdghilmnrSs] [-f address_family] [-M core] [-N system]", " netstat [-bdn] [-I interface] [-M core] [-N system] [-w wait]", " netstat [-M core] [-N system] [-p protocol]"); exit(1); diff -u -urN src/usr.bin/netstat/netstat.1 mysrc/usr.bin/netstat/netstat.1 --- src/usr.bin/netstat/netstat.1 Sat Mar 11 16:33:13 2000 +++ mysrc/usr.bin/netstat/netstat.1 Thu Aug 17 15:05:17 2000 @@ -235,6 +235,10 @@ The program will complain if .Ar protocol is unknown or if there is no statistics routine for it. +.It Fl S +Show service names even if numeric output has been requested by the +.Fl n +option. .It Fl s Show per-protocol statistics. If this option is repeated, counters with a value of zero are suppressed. diff -u -urN src/usr.bin/netstat/netstat.h mysrc/usr.bin/netstat/netstat.h --- src/usr.bin/netstat/netstat.h Thu Jul 20 19:38:59 2000 +++ mysrc/usr.bin/netstat/netstat.h Thu Aug 17 14:55:54 2000 @@ -48,6 +48,7 @@ int nflag; /* show addresses numerically */ int pflag; /* show given protocol */ int rflag; /* show routing tables (or routing stats) */ +int Sflag; /* show service names even if -n specified */ int sflag; /* show protocol statistics */ int tflag; /* show i/f watchdog timers */ diff -u -urN src/usr.bin/sockstat/sockstat.pl mysrc/usr.bin/sockstat/sockstat.pl --- src/usr.bin/sockstat/sockstat.pl Sat Mar 11 13:25:00 2000 +++ mysrc/usr.bin/sockstat/sockstat.pl Thu Aug 17 15:08:26 2000 @@ -40,7 +40,7 @@ $user, $cmd, $pid, $fd, $proto,$laddr, $faddr . -open NETSTAT, "netstat -Aan |" or die "'netstat' failed: $!"; +open NETSTAT, "netstat -AanS |" or die "'netstat' failed: $!"; <NETSTAT>; <NETSTAT>; while (<NETSTAT>) { >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000817122507.1415.qmail>