Я пишу сценарий коллекции на python для сбора криминалистических артефактов с различных * nix-хостов с использованием сценариев Python 2, однако я сталкиваюсь с некоторыми проблемами при написании коллекции netstat для Solaris.
Есть несколько ограничений:как мне этого добиться. Я не могу использовать двоичные файлы ELF (кроме Python) на компьютере (так как ими часто манипулируют, когда компьютеры атакуют * nix), я не могу импортировать внешние библиотеки (так как это не будет работать на компьютерах, которые я администрирую), и это должно быть записанов Python 2 по причинам обратной совместимости.
Все это, как говорится, я использую документ netstat.c от Illumos (реализация Solaris с открытым исходным кодом) в качестве своей базы, и, по сути, пытаюсь реверс-инжиниринг этого и переписать егов Python 2.
https://searchcode.com/codesearch/raw/52916131/
До сих пор я понял, что скрипт открывает «/ dev / arp» и «/ dev / kstat», чтобы обеспечить возвратзначения.
import os
sd = os.open('/dev/arp', os.O_RDWR)
kc = os.open('/dev/kstat', os.O_RDWR)
После того, как это было сделано, значение 'sd' используется для сбора статистики сети с помощью метода mibget ().
И вот в чем дело. Чтобы собрать информацию о netstat, Solaris запрашивает sd
с помощью системного вызова getmsg
, однако он использует структуру данных, с которой я не знаком.
getcode = getmsg(sd, &ctlbuf, (struct strbuf *)0, &flags);
Я понятия не имею, как восстановить это в Python 2У кого-нибудь из вас есть хорошие люди, есть идеи, куда я могу пойти отсюда? Я неверно истолковываю это?
Я понимаю, что psutil
реализация netstat работает в Solaris, поэтому должен быть способ для этого.
Спасибо всем за помощь.
Редактировать:
Похоже, это соответствующий раздел truss netstat
:
open("/etc/default/inet_type", O_RDONLY) Err#2 ENOENT
open("/dev/arp", O_RDWR) = 3
ioctl(3, I_PUSH, "tcp") = 0
ioctl(3, I_PUSH, "udp") = 0
ioctl(3, I_PUSH, "icmp") = 0
putmsg(3, 0x08047E3C, 0x00000000, 0) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
getmsg(3, 0x00000000, 0x08047E48, 0x08047E5C) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
getmsg(3, 0x00000000, 0x08047E48, 0x08047E5C) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
getmsg(3, 0x00000000, 0x08047E48, 0x08047E5C) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
getmsg(3, 0x00000000, 0x08047E48, 0x08047E5C) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
getmsg(3, 0x00000000, 0x08047E48, 0x08047E5C) = 0
getmsg(3, 0x08047E3C, 0x00000000, 0x08047E5C) = 2
brk(0x080736E0) = 0