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

在Python2.6+中为Solaris创建netstat的实现;,python,c,python-2.7,solaris,computer-forensics,Python,C,Python 2.7,Solaris,Computer Forensics,我正在用python编写一个集合脚本,以使用python 2脚本从各种*nix主机获取取证工件,但是在为Solaris编写netstat集合时遇到了一些问题 我如何做到这一点有一些限制。我不能在计算机上使用ELF二进制文件(Python除外)(因为它们在*nix机器受到攻击时经常被操纵),我不能导入外部库(因为它不会在我管理的计算机上运行),并且出于向后兼容性的原因,它必须用Python 2编写 尽管如此,我还是使用Illumos提供的netstat.c文档(一个开放源码的Solaris实现)作

我正在用python编写一个集合脚本,以使用python 2脚本从各种*nix主机获取取证工件,但是在为Solaris编写netstat集合时遇到了一些问题

我如何做到这一点有一些限制。我不能在计算机上使用ELF二进制文件(Python除外)(因为它们在*nix机器受到攻击时经常被操纵),我不能导入外部库(因为它不会在我管理的计算机上运行),并且出于向后兼容性的原因,它必须用Python 2编写

尽管如此,我还是使用Illumos提供的netstat.c文档(一个开放源码的Solaris实现)作为我的基础,并尝试对其进行反向工程,然后用Python 2重写它

到目前为止,我发现脚本会打开“/dev/arp”和“/dev/kstat”以确保有返回值

导入操作系统
sd=os.open('/dev/arp',os.O_RDWR)
kc=os.open('/dev/kstat',os.O_RDWR)
完成此操作后,“sd”值将用于使用mibget()方法收集网络统计信息

这就是问题所在。为了收集netstat信息,Solaris正在使用syscall
getmsg
查询
sd
,但是它使用的是我不熟悉的数据结构

getcode=getmsg(sd,&ctlbuf,(struct strbuf*)0,&flags);
我不知道如何在Python2中重建它,你们这些优秀的人对我的未来有什么想法吗?我的解释错了吗

我理解netstat的
psutil
实现在Solaris上工作,因此必须有一种方法来实现这一点

谢谢大家的帮助

编辑:

这似乎是truss netstat的相关部分:

open(“/etc/default/inet_type”,O_RDONLY)Err#2 enoint
打开(“/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
是:

名称

getmsg,getpmsg-从流文件(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]
[OB XSR][Option Start]#包括
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);[选项结束]
说明

getmsg()
函数应检索消息的内容 位于与关联的流头读取队列的头部 流文件并将内容放入一个或多个缓冲区。这个 消息包含数据部分、控制部分或两者。数据 信息的控制部分应放置在单独的 缓冲区,如下所述。每个部分的语义由 消息的发起者

我不知道Solaris上有任何用于流的Python绑定

从未在Linux上实现

getmsg()
struct strbuf
是:

名称

getmsg,getpmsg-从流文件(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]
[OB XSR][Option Start]#包括
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);[选项结束]
说明

getmsg()
函数应检索消息的内容 位于与关联的流头读取队列的头部 流文件并将内容放入一个或多个缓冲区。这个 消息包含数据部分、控制部分或两者。数据 信息的控制部分应放置在单独的 缓冲区,如下所述。每个部分的语义由 消息的发起者

我不知道Solaris上有任何用于流的Python绑定


从未在Linux上实现

当然,Solaris会使用一个几乎没有其他人使用的协议,而且已经过时了。不幸的是,我不知道这是否会使我更接近于解决问题,因为我似乎需要弄清楚他们设置的任意缓冲区是什么。非常感谢。当然,Solaris会使用一个几乎没有其他人使用的协议,而且已经过时了。不幸的是,我不知道这是否会使我更接近于解决问题,因为我似乎需要弄清楚他们设置的任意缓冲区是什么。非常感谢。