纯python SMB客户端
pike-smb2的Python项目详细描述
梭子鱼
Pike是一个(几乎)纯Python框架,用于编写SMB2/3协议正确性测试。在
还有(旧的)API documentation from epydoc。在
先决条件
基本功能要求:
- Python 2.7、3.6+
- 隐翅虫
生成kerberos库所需:
- Python开发头文件
- MIT gssapi_krb5(加上devel头文件)
- Ubuntu:krb5用户,libkrb5-dev
可选项:用于生成文档的epydoc
安装
$ python -m pip install pike-smb2
生成说明
Ubuntu 14.04/16.04
^{pr2}$运行测试
test子目录中的测试是普通的Python unittest测试和 可以正常运行。以下环境变量由使用 测试:
PIKE_SERVER=<host name or address>
PIKE_SHARE=<share name>
PIKE_CREDS=DOMAIN\User%Passwd
PIKE_LOGLEVEL=info|warning|error|critical|debug
PIKE_SIGN=yes|no
PIKE_ENCRYPT=yes|no
PIKE_MAX_DIALECT=DIALECT_SMBX_Y_Z
PIKE_MIN_DIALECT=DIALECT_SMBX_Y_Z
PIKE_TRACE=yes|no
如果PIKE_TRACE
设置为yes
,则传入/传出数据包将
在调试级别记录。在
$ python -m unittest discover -s pike/test -p *.py
或者,生成并运行所有测试
$ python setup.py test
运行单个测试文件
$ python -m unittest discover -s pike/test -p echo.py
运行单个测试用例
$ python -m unittest pike.test.echo.EchoTest.test_echo
Kerberos提示
设置由许多Linux发行版提供的mitkerberos以进行互操作 使用现有的activedirectory和Pike相对简单。在
如果未指定PIKE_CREDS
,并且kerberos模块是在
安装pike,则当前的Kerberos凭据将用于
验证。在
在客户机上使用最小的/etc/krb5.conf
,如下所示
[libdefaults]
default_realm = AD.EXAMPLE.COM
检索所需用户的票证
$ kinit user_1
(可选)在DNS的leiu中,为服务器名称+域添加主机项
$ echo "10.1.1.150 smb-server.ad.example.com" >> /etc/hosts
进行派克测试
$ PIKE_SERVER="smb-server.ad.example.com" PIKE_SHARE="C$" python -m unittest discover -s pike/test -p tree.py
请注意,您可能需要通过完全限定来指定服务器 主机名,以便Kerberos确定要使用哪个票证。如果你 使用IP地址时在会话设置过程中出错,这可能是 原因。在
解码缓冲区溢出
当派克遇到缓冲区或边界问题时,BufferOverrun
是
用完整的数据包字节引发。这有两种方法。在
用长矛
对于某些问题,可能需要使用调试器运行pike 同时解码数据包字节以重现运行时解析或解码 问题。在
from binascii import unhexlify
import array
import pike.netbios
buf = array.array("B", unhexlify(b'00000114fe534d4240000000000000000000040001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041000100110302008a8c2a17f5f24e5eb278dd8aaa90d42e1e0000000000010000001000000010006c52c4c7e53dd60166157c68c63dd60180005500d8000000605306062b0601050502a0493047a019301706092a864886f712010202060a2b06010401823702020aa32a3028a0261b246e6f745f646566696e65645f696e5f5246433431373840706c656173655f69676e6f72650000000100260000000000010020000100c93dfb463f3e99ed9030a66d28548c330a4ae9a65856237d00e61f68c14eb09f0000020004000000000001000200'))
nb = pike.netbios.Netbios()
nb.parse(buf)
和Wireshark
通过查看包,其他解码问题可能更容易理解 使用pcap分析工具。在
$ echo '00000114fe534d4240000000000000000000040001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041000100110302008a8c2a17f5f24e5eb278dd8aaa90d42e1e00000000000100000010000000100050cff0c2e43dd60166157c68c63dd60180005500d8000000605306062b0601050502a0493047a019301706092a864886f712010202060a2b06010401823702020aa32a3028a0261b246e6f745f646566696e65645f696e5f5246433431373840706c656173655f69676e6f7265000000010026000000000001002000010017af98eb38fdcd3db91bdca1303e9c72ef37b7e572abf897e47bd779aaa641d90000020004000000000001000200' \
| xxd -r -p - \
| od -Ax -tx1 -v \
| text2pcap -i46 -T 445,445 - - \
| tshark -P -V -r -
xxd
将BufferOverrun
异常的ascii十六进制bytestream输出解码为二进制od
将输出转储为格式wireshark can readtext2pcap
(wireshark)向SMB包附加假以太网和IP报头,并将pcap文件写入stdouttshark
(wireshark)解码SMB包并显示完整的包详细信息
许可证
此项目pike和pike-smb2,是根据戴尔公司的开源项目计划授予的简化BSD许可证发布的,
除了pykerb/
下的代码,该代码是根据苹果公司授予的Apache2.0许可发布的。
所有的项目贡献完全反映了各自的作者,而不是戴尔公司或苹果公司
有关许可信息,请参阅文件LICENSE。在
- 项目
标签: