在Python2.6 +中为Solaris创建netstat的实现

问题描述 投票:1回答:1

[我正在用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
python c python-2.7 solaris computer-forensics
1个回答
0
投票

[getmsg()struct strbufspecified 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上实现。

© www.soinside.com 2019 - 2024. All rights reserved.