Предполагая, что сокет, для которого вы хотите обнаружить открытие и закрытие, не является тем, за что ваша программа отвечает за себя, а какой-то другой процесс в системе обрабатывает его, лучшим способом может быть использование библиотеки winpcap
. winpcap
позволяет подписаться на необработанный поток всех IP-пакетов, входящих и выходящих из сетевых интерфейсов. Вы можете также предоставить фильтр, такой как «Показывать только TCP-пакеты на порту 22». Ваша программа получает необработанные пакеты, поэтому вы получаете заголовок Ethernet, затем заголовок IP, затем заголовок TCP, а затем полезные данные (полезные данные будут зашифрованы для SFTP). Анализируя эти пакеты, вы сможете обнаружить TCP-рукопожатие при подключении, узнать IP-адрес и порт, который подключается, и определить, когда TCP-порт закрыт.
Я не использую .NET сам, но я нашел эту оболочку winpcap для .NET в Google, которая должна позволить вам использовать winpcap
из вашего приложения .NET.
Оболочка WinPCAP.NET