Files
OpenBSD-Notes/netstat-tulp.sh
T
2026-09-21 17:20:21 +03:00

99 lines
2.2 KiB
Bash

#!/bin/ksh
# OpenBSD equivalent-ish to:
#
# Linux: netstat -tulpn
#
# Shows listening TCP sockets and UDP sockets together with
# the process using the socket when fstat can identify it.
#
# Best run as root for complete process information.
printf "%-5s %-7s %-8s %-22s %-22s %s\n" \
"PROTO" "PID" "USER" "LOCAL ADDRESS" "FOREIGN ADDRESS" "PROCESS"
printf "%-5s %-7s %-8s %-22s %-22s %s\n" \
"-----" "-------" "--------" "----------------------" \
"----------------------" "-------"
# ------------------------------------------------------------
# TCP listening sockets
# ------------------------------------------------------------
netstat -an -f inet 2>/dev/null |
awk '$1 ~ /^tcp/ && $6 == "LISTEN" {
print $1, $4, $5
}' |
while read proto local foreign
do
# Extract port from local address.
port="${local##*.}"
# Try to find the process owning this socket.
owner="$(
fstat 2>/dev/null |
awk -v port="$port" '
$0 ~ ("\\*:" port "([^0-9]|$)") ||
$0 ~ ("\\." port "([^0-9]|$)") {
print $1, $2, $3
exit
}
'
)"
if [ -n "$owner" ]; then
set -- $owner
user="$1"
process="$2"
pid="$3"
else
user="-"
process="-"
pid="-"
fi
printf "%-5s %-7s %-8s %-22s %-22s %s\n" \
"$proto" "$pid" "$user" "$local" "$foreign" "$process"
done
# ------------------------------------------------------------
# UDP sockets
# ------------------------------------------------------------
netstat -an -f inet 2>/dev/null |
awk '$1 ~ /^udp/ {
print $1, $4, $5
}' |
while read proto local foreign
do
port="${local##*.}"
owner="$(
fstat 2>/dev/null |
awk -v port="$port" '
$0 ~ ("\\*:" port "([^0-9]|$)") ||
$0 ~ ("\\." port "([^0-9]|$)") {
print $1, $2, $3
exit
}
'
)"
if [ -n "$owner" ]; then
set -- $owner
user="$1"
process="$2"
pid="$3"
else
user="-"
process="-"
pid="-"
fi
printf "%-5s %-7s %-8s %-22s %-22s %s\n" \
"$proto" "$pid" "$user" "$local" "$foreign" "$process"
done