-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck_ports.sh
More file actions
1 lines (1 loc) · 2.14 KB
/
check_ports.sh
File metadata and controls
1 lines (1 loc) · 2.14 KB
1
( command -v readlink >/dev/null 2>&1 && HAVE_RL=1 || HAVE_RL=0; if [ "$HAVE_RL" -eq 1 ]; then for fd in /proc/[0-9]*/fd/*; do l=$(readlink "$fd" 2>/dev/null)||continue; case "$l" in socket:\[*\]) ino=${l#socket:[}; ino=${ino%]}; pid=${fd#/proc/}; pid=${pid%%/*}; echo "M $ino $pid";; esac; done; else for fd in /proc/[0-9]*/fd/*; do l=$(ls -l "$fd" 2>/dev/null)||continue; l=${l##*-> }; case "$l" in socket:\[*\]) ino=${l#socket:[}; ino=${ino%]}; pid=${fd#/proc/}; pid=${pid%%/*}; echo "M $ino $pid";; esac; done; fi; for spec in tcp4:/proc/net/tcp tcp6:/proc/net/tcp6 udp4:/proc/net/udp udp6:/proc/net/udp6; do tag=${spec%%:*}; f=${spec#*:}; [ -r "$f" ] || continue; echo "F $tag"; cat "$f"; done ) 2>/dev/null | awk 'function h2d(h, i,c,n){n=0; for(i=1;i<=length(h);i++){c=toupper(substr(h,i,1)); n=n*16+index("0123456789ABCDEF",c)-1} return n} function ip4(x){return h2d(substr(x,7,2))"."h2d(substr(x,5,2))"."h2d(substr(x,3,2))"."h2d(substr(x,1,2))} function ip6(x, i,chunk,out){out=""; for(i=1;i<=32;i+=8){chunk=substr(x,i,8); out=out substr(chunk,7,2) substr(chunk,5,2) substr(chunk,3,2) substr(chunk,1,2)} gsub(/(.{4})/,"\\1:",out); sub(/:$/,"",out); return out} function trim(s){sub(/^[ \t\r\n]+/,"",s); sub(/[ \t\r\n]+$/,"",s); return s} function comm(pid, f,c){if(pid in C)return C[pid]; f="/proc/"pid"/comm"; if((getline c < f)>0) C[pid]=trim(c); else C[pid]="?"; close(f); return C[pid]} $1=="M"{ino=$2; pid=$3; k=ino SUBSEP pid; if(!SE[k]++) PM[ino]=(PM[ino]?PM[ino]","pid:pid); next} $1=="F"{MODE=$2; next} $1=="sl"{next} MODE!="" && $2~/:/{ proto=(MODE~/^tcp/?"tcp":"udp"); is6=(MODE~/6$/); la=$2; ra=$3; st=$4; uid=$8; inode=$10; split(la,A,":"); lip=A[1]; lp=h2d(A[2]); split(ra,B,":"); rip=B[1]; rp=h2d(B[2]); if(proto=="tcp" && st!="0A") next; if(proto=="udp" && (rip !~ /^0+$/ || rp!=0)) next; if(lp==0) next; if(is6){ip=(lip~/^0+$/)?"::":ip6(lip); addr="["ip"]:"lp}else{ip=(lip=="00000000")?"0.0.0.0":ip4(lip); addr=ip":"lp} owners=PM[inode]; if(owners==""){own="?"} else {n=split(owners,P,","); own=""; for(i=1;i<=n;i++){pid=P[i]; own=own (own?"," : "") pid "(" comm(pid) ")"} } out=proto" "addr" pid="own" uid="uid" inode="inode; if(!OUT[out]++) print out }' | sort -u