Я работаю над сетевым монитором для Linux, без перехвата пакетов. Я планирую считывать сетевую статистику и сопутствующие данные из /proc/net
файлов.
Я знаю, что /proc
это точка монтирования файловой системы процесса, которая представляет собой виртуальную файловую систему, отражающую внутреннюю структуру данных ядра.
Мне хотелось бы узнать, как он заполняется и можно ли напрямую прочитать внутреннее содержимое ОС.
решение1
/proc
заполняется «живым» ядром: содержимое каталогов и файлов создается на лету, когда приложение обращается к ним. Поэтому вы не найдете никакой утилиты, которая их заполняет: если вы хотите узнать, как все туда попадает, вам придется прочитатькод ядраилидокументация ядра. В исходном коде записи создаются различными частямисетевой код. Многие записи в /proc/net
документированы как частьсетевая документация.
Это самый низкий уровень, который можно получить, чтобы прочитать внутренности ОС. Единственный способ забраться глубже — написать драйвер ядра.
Другой способ получения сетевой информации — через ioctl
и getsockopt
вызовы сокетов. Иногда это удобнее в C. Я думаю, что есть информация, которую можно получить одним методом, но не другим, и наоборот, но я не знаю подробностей.