Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Jan 1998 00:54:13 -0600 (CST)
From:      Joel Ray Holveck <joelh@gnu.org>
To:        freebsd-hackers@FreeBSD.ORG
Subject:   Adding process ID listing to netstat
Message-ID:  <199801090654.AAA15353@detlev.UUCP>

next in thread | raw e-mail | index | archive | help
Would it be useful to others to allow netstat to give the process ID's
that are using sockets?

To give the basic idea, I have this implemented with the inet domain
sockets.  A patch to -current netstat is enclosed.  To use it, just
run netstat -P (or netstat -Pfinet or whatever you like).

If it seems useful, I'll extend this to work on other domains'
sockets, document it, and submit it for inclusion in -current.

DISCLAIMER:
I don't know anything about sockets and their internals.  This means I
could very well be referencing stray pointers under all sorts of
bizarre conditions.  This patch has been tested in at least two cases,
on the same computer, within five minutes of each other.

Best,
joelh

-------- cut here --------
*** inet.c.orig	Fri Jan  9 00:07:37 1998
--- inet.c	Fri Jan  9 00:37:11 1998
***************
*** 131,137 ****
  			putchar('\n');
  			if (Aflag)
  				printf("%-8.8s ", "PCB");
! 			printf(Aflag ?
  				"%-5.5s %-6.6s %-6.6s  %-18.18s %-18.18s %s\n" :
  				"%-5.5s %-6.6s %-6.6s  %-22.22s %-22.22s %s\n",
  				"Proto", "Recv-Q", "Send-Q",
--- 131,139 ----
  			putchar('\n');
  			if (Aflag)
  				printf("%-8.8s ", "PCB");
! 			if (Pflag)
! 			        printf("%5.5s ", "pid");
! 			printf((Aflag || Pflag) ?
  				"%-5.5s %-6.6s %-6.6s  %-18.18s %-18.18s %s\n" :
  				"%-5.5s %-6.6s %-6.6s  %-22.22s %-22.22s %s\n",
  				"Proto", "Recv-Q", "Send-Q",
***************
*** 143,148 ****
--- 145,152 ----
  				printf("%8x ", (int)inpcb.inp_ppcb);
  			else
  				printf("%8x ", (int)next);
+ 		if (Pflag)
+ 		        printf("%5d ", sockb.so_rcv.sb_sel.si_pid);
  		printf("%-5.5s %6ld %6ld ", name, sockb.so_rcv.sb_cc,
  			sockb.so_snd.sb_cc);
  		if (nflag) {
***************
*** 481,487 ****
  	char line[80], *cp;
  	int width;
  
! 	sprintf(line, "%.*s.", (Aflag && !numeric) ? 12 : 16, inetname(in));
  	cp = index(line, '\0');
  	if (!numeric && port)
  		sp = getservbyport((int)port, proto);
--- 485,492 ----
  	char line[80], *cp;
  	int width;
  
! 	sprintf(line, "%.*s.", ((Pflag || Aflag) && !numeric) ? 12 : 16,
! 		inetname(in));
  	cp = index(line, '\0');
  	if (!numeric && port)
  		sp = getservbyport((int)port, proto);
***************
*** 489,495 ****
  		sprintf(cp, "%.15s", sp ? sp->s_name : "*");
  	else
  		sprintf(cp, "%d", ntohs((u_short)port));
! 	width = Aflag ? 18 : 22;
  	printf(" %-*.*s", width, width, line);
  }
  
--- 494,500 ----
  		sprintf(cp, "%.15s", sp ? sp->s_name : "*");
  	else
  		sprintf(cp, "%d", ntohs((u_short)port));
! 	width = (Pflag || Aflag) ? 18 : 22;
  	printf(" %-*.*s", width, width, line);
  }
  
*** main.c.orig	Fri Jan  9 00:07:36 1998
--- main.c	Fri Jan  9 00:30:14 1998
***************
*** 243,249 ****
  
  	af = AF_UNSPEC;
  
! 	while ((ch = getopt(argc, argv, "Aabdf:ghI:iM:mN:np:rstuw:")) != -1)
  		switch(ch) {
  		case 'A':
  			Aflag = 1;
--- 243,249 ----
  
  	af = AF_UNSPEC;
  
! 	while ((ch = getopt(argc, argv, "Aabdf:ghI:iM:mN:nPp:rstuw:")) != -1)
  		switch(ch) {
  		case 'A':
  			Aflag = 1;
***************
*** 305,310 ****
--- 305,313 ----
  			break;
  		case 'n':
  			nflag = 1;
+ 			break;
+ 	        case 'P':
+ 		        Pflag =  1;
  			break;
  		case 'p':
  			if ((tp = name2protox(optarg)) == NULL) {
*** netstat.h.orig	Fri Jan  9 00:07:35 1998
--- netstat.h	Fri Jan  9 00:24:40 1998
***************
*** 43,48 ****
--- 43,49 ----
  int	iflag;		/* show interfaces */
  int	mflag;		/* show memory stats */
  int	nflag;		/* show addresses numerically */
+ int     Pflag;          /* show sockets' pid */
  int	pflag;		/* show given protocol */
  int	rflag;		/* show routing tables (or routing stats) */
  int	sflag;		/* show protocol statistics */
-------- cut here --------

-- 
Joel Ray Holveck - joelh@gnu.org - http://www.wp.com/piquan
   Fourth law of programming:
   Anything that can go wrong wi
sendmail: segmentation violation - core dumped



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199801090654.AAA15353>