[我正在用python编写一个收集脚本,以使用Python 2脚本从各种* nix主机中获取取证伪造,但是我在为Solaris编写netstat收集时遇到了一些问题。
我在实现此目标上有一些限制。我不能在计算机上使用ELF二进制文件(Python除外)(因为在攻击* nix机器时它们经常被操纵),我不能导入外部库(因为它不会在我管理的计算机上运行),因此必须编写在Python 2中出于向后兼容的原因。
所有这些,我以Illumos(一个开放源代码的Solaris实现)的netstat.c文档为基础,并且本质上是试图对其进行反向工程并将其重写为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中重建它,你们中的任何人都对我从这里到哪里有任何想法吗?我是在解释这个错误吗?
我了解netstat的psutil
实现可在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
[getmsg()
和struct strbuf
是specified by POSIX, albeit marked as obsolescent in POSIX 7:
NAME
getmsg,getpmsg-从STREAMS文件(STREAMS)接收下一条消息
提要
[OB XSR] [Option Start] #include <stropts.h> int getmsg(int fildes, struct strbuf *restrict ctlptr, struct strbuf *restrict dataptr, int *restrict flagsp); int getpmsg(int fildes, struct strbuf *restrict ctlptr, struct strbuf *restrict dataptr, int *restrict bandp, int *restrict flagsp); [Option End]
DESCRIPTION
getmsg()
功能应检索消息的内容位于STREAM头部读取队列的头部,与STREAMS文件,然后将内容放入一个或多个缓冲区。的消息包含数据部分,控制部分或两者。数据消息的控制部分应放在单独的位置缓冲区,如下所述。每个部分的语义由消息的发起者。...
我不知道Solaris上STREAMS的任何Python绑定。
STREAMS functionality从未在Linux上实现。