Allow the socket list to be limited to a specific jail id.
No objections: current@
This commit is contained in:
parent
41d25f72a0
commit
00feaafdf8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=235870
@ -27,7 +27,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd January 24, 2012
|
.Dd May 16, 2012
|
||||||
.Dt SOCKSTAT 1
|
.Dt SOCKSTAT 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -36,6 +36,7 @@
|
|||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl 46cLlu
|
.Op Fl 46cLlu
|
||||||
|
.Op Fl j Ar jid
|
||||||
.Op Fl p Ar ports
|
.Op Fl p Ar ports
|
||||||
.Op Fl P Ar protocols
|
.Op Fl P Ar protocols
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
@ -57,6 +58,8 @@ Show
|
|||||||
(IPv6) sockets.
|
(IPv6) sockets.
|
||||||
.It Fl c
|
.It Fl c
|
||||||
Show connected sockets.
|
Show connected sockets.
|
||||||
|
.It Fl j Ar jid
|
||||||
|
Show only sockets belonging to the specified jail ID.
|
||||||
.It Fl L
|
.It Fl L
|
||||||
Only show Internet sockets if the local or foreign addresses are not
|
Only show Internet sockets if the local or foreign addresses are not
|
||||||
in the loopback network prefix
|
in the loopback network prefix
|
||||||
|
@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
static int opt_4; /* Show IPv4 sockets */
|
static int opt_4; /* Show IPv4 sockets */
|
||||||
static int opt_6; /* Show IPv6 sockets */
|
static int opt_6; /* Show IPv6 sockets */
|
||||||
static int opt_c; /* Show connected sockets */
|
static int opt_c; /* Show connected sockets */
|
||||||
|
static int opt_j; /* Show specified jail */
|
||||||
static int opt_L; /* Don't show IPv4 or IPv6 loopback sockets */
|
static int opt_L; /* Don't show IPv4 or IPv6 loopback sockets */
|
||||||
static int opt_l; /* Show listening sockets */
|
static int opt_l; /* Show listening sockets */
|
||||||
static int opt_u; /* Show Unix domain sockets */
|
static int opt_u; /* Show Unix domain sockets */
|
||||||
@ -548,6 +549,27 @@ getprocname(pid_t pid)
|
|||||||
return (proc.ki_comm);
|
return (proc.ki_comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
getprocjid(pid_t pid)
|
||||||
|
{
|
||||||
|
static struct kinfo_proc proc;
|
||||||
|
size_t len;
|
||||||
|
int mib[4];
|
||||||
|
|
||||||
|
mib[0] = CTL_KERN;
|
||||||
|
mib[1] = KERN_PROC;
|
||||||
|
mib[2] = KERN_PROC_PID;
|
||||||
|
mib[3] = (int)pid;
|
||||||
|
len = sizeof proc;
|
||||||
|
if (sysctl(mib, 4, &proc, &len, NULL, 0) == -1) {
|
||||||
|
/* Do not warn if the process exits before we get its jid. */
|
||||||
|
if (errno != ESRCH)
|
||||||
|
warn("sysctl()");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
return (proc.ki_jid);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check_ports(struct sock *s)
|
check_ports(struct sock *s)
|
||||||
{
|
{
|
||||||
@ -643,6 +665,8 @@ display(void)
|
|||||||
for (xf = xfiles, n = 0; n < nxfiles; ++n, ++xf) {
|
for (xf = xfiles, n = 0; n < nxfiles; ++n, ++xf) {
|
||||||
if (xf->xf_data == NULL)
|
if (xf->xf_data == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
if (opt_j >= 0 && opt_j != getprocjid(xf->xf_pid))
|
||||||
|
continue;
|
||||||
hash = (int)((uintptr_t)xf->xf_data % HASHSIZE);
|
hash = (int)((uintptr_t)xf->xf_data % HASHSIZE);
|
||||||
for (s = sockhash[hash]; s != NULL; s = s->next)
|
for (s = sockhash[hash]; s != NULL; s = s->next)
|
||||||
if ((void *)s->socket == xf->xf_data)
|
if ((void *)s->socket == xf->xf_data)
|
||||||
@ -668,6 +692,8 @@ display(void)
|
|||||||
pos += xprintf("%d ", xf->xf_fd);
|
pos += xprintf("%d ", xf->xf_fd);
|
||||||
displaysock(s, pos);
|
displaysock(s, pos);
|
||||||
}
|
}
|
||||||
|
if (opt_j >= 0)
|
||||||
|
return;
|
||||||
for (hash = 0; hash < HASHSIZE; hash++) {
|
for (hash = 0; hash < HASHSIZE; hash++) {
|
||||||
for (s = sockhash[hash]; s != NULL; s = s->next) {
|
for (s = sockhash[hash]; s != NULL; s = s->next) {
|
||||||
if (s->shown)
|
if (s->shown)
|
||||||
@ -716,7 +742,8 @@ main(int argc, char *argv[])
|
|||||||
int protos_defined = -1;
|
int protos_defined = -1;
|
||||||
int o, i;
|
int o, i;
|
||||||
|
|
||||||
while ((o = getopt(argc, argv, "46cLlp:P:uv")) != -1)
|
opt_j = -1;
|
||||||
|
while ((o = getopt(argc, argv, "46cj:Llp:P:uv")) != -1)
|
||||||
switch (o) {
|
switch (o) {
|
||||||
case '4':
|
case '4':
|
||||||
opt_4 = 1;
|
opt_4 = 1;
|
||||||
@ -727,6 +754,9 @@ main(int argc, char *argv[])
|
|||||||
case 'c':
|
case 'c':
|
||||||
opt_c = 1;
|
opt_c = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'j':
|
||||||
|
opt_j = atoi(optarg);
|
||||||
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
opt_L = 1;
|
opt_L = 1;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user