add dirs
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#!/bin/ksh
|
||||
|
||||
#
|
||||
# ports
|
||||
#
|
||||
# Show network sockets with their owning processes.
|
||||
#
|
||||
# Similar idea to Linux:
|
||||
#
|
||||
# netstat -tulpn
|
||||
#
|
||||
# OpenBSD implementation using:
|
||||
#
|
||||
# fstat
|
||||
# ps
|
||||
#
|
||||
# Run as root for complete information.
|
||||
#
|
||||
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Header
|
||||
# ------------------------------------------------------------
|
||||
|
||||
printf "%-5s %-28s %-8s %-12s %s\n" \
|
||||
"PROTO" \
|
||||
"LOCAL ADDRESS" \
|
||||
"PID" \
|
||||
"USER" \
|
||||
"COMMAND"
|
||||
|
||||
printf "%-5s %-28s %-8s %-12s %s\n" \
|
||||
"-----" \
|
||||
"----------------------------" \
|
||||
"--------" \
|
||||
"------------" \
|
||||
"-------"
|
||||
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Read Internet sockets from fstat
|
||||
# ------------------------------------------------------------
|
||||
|
||||
fstat 2>/dev/null |
|
||||
awk '
|
||||
#
|
||||
# We only want IPv4/IPv6 Internet sockets.
|
||||
#
|
||||
$5 == "internet" || $5 == "internet6" {
|
||||
|
||||
user = $1
|
||||
process = $2
|
||||
pid = $3
|
||||
family = $5
|
||||
type = $6
|
||||
proto = $7
|
||||
|
||||
#
|
||||
# Ignore raw sockets.
|
||||
#
|
||||
if (type != "stream" && type != "dgram")
|
||||
next
|
||||
|
||||
#
|
||||
# Only TCP and UDP.
|
||||
#
|
||||
if (proto != "tcp" && proto != "udp")
|
||||
next
|
||||
|
||||
|
||||
#
|
||||
# Determine tcp4/tcp6/udp4/udp6.
|
||||
#
|
||||
if (family == "internet6")
|
||||
proto = proto "6"
|
||||
else
|
||||
proto = proto "4"
|
||||
|
||||
|
||||
#
|
||||
# Find the local address.
|
||||
#
|
||||
# fstat output contains a kernel socket pointer before
|
||||
# TCP addresses, for example:
|
||||
#
|
||||
# tcp 0xffff800001058140 *:22
|
||||
#
|
||||
# UDP normally looks like:
|
||||
#
|
||||
# udp 192.168.0.2:37163 <-> ...
|
||||
#
|
||||
# Search fields after the protocol for the first field
|
||||
# containing ":".
|
||||
#
|
||||
|
||||
local = "-"
|
||||
|
||||
for (i = 8; i <= NF; i++) {
|
||||
|
||||
if ($i ~ /:/) {
|
||||
local = $i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Print fields separated by tabs so the shell can
|
||||
# safely parse them.
|
||||
#
|
||||
printf "%s\t%s\t%s\t%s\n",
|
||||
proto,
|
||||
local,
|
||||
pid,
|
||||
user
|
||||
}
|
||||
' |
|
||||
while IFS=' ' read proto local pid user
|
||||
do
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Get complete command line from PID.
|
||||
# --------------------------------------------------------
|
||||
|
||||
command="$(
|
||||
ps -p "$pid" -o args= 2>/dev/null
|
||||
)"
|
||||
|
||||
if [ -z "$command" ]; then
|
||||
command="-"
|
||||
fi
|
||||
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Output
|
||||
# --------------------------------------------------------
|
||||
|
||||
printf "%-5s %-28s %-8s %-12s %s\n" \
|
||||
"$proto" \
|
||||
"$local" \
|
||||
"$pid" \
|
||||
"$user" \
|
||||
"$command"
|
||||
|
||||
done
|
||||
Reference in New Issue
Block a user