Использую Ubuntu Server 16. На моем компьютере открыт порт SCTP, и мне нужно его найти и закрыть (без перезагрузки).
lsof
не отображает сокеты SCTP, только TCP и UDP.
Я просматриваю все эти сетевые утилиты, и поддержка SCTP удивительно скудна для такого старого стандарта. Я начал netstat
работать с SCTP, создав новейшие сетевые инструментыотсюда. sudo netstat --sctp -tulpn
показывает некоторые открытые соединения SCTP, но не говорит, какой процесс их имеет. Он показывает только PID для сокетов UDP и TCP.
решение1
Какой-то хакерский обходной путь, но, похоже, он работает для меня. Надеюсь, кто-то найдет лучший путь, но мои первые мысли (ss/netstat) не признают SCTP.
Сначала используйте procfs
для поиска inode соединения sctp:
$ cat /proc/net/sctp/eps
ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS
b6d72780 a8903800 2 10 48 123 0 1895802 0.0.0.0
Возьмите этот индексный дескриптор (в моем примере 1895802) и используйте его, lsof
чтобы найти его владельца:
$ lsof -R | grep 1895802
socat 8697 2045 root 5u sock 1895802 0t0 SCTP ENDPT: b6d72780 0.0.0.0[123]
Как видите, я использовал socat
сокет, прослушивающий порт 123/sctp. 8697 — это pid.