纯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

pike-smb2 on pypi.org。在

生成说明

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 -
  • xxdBufferOverrun异常的ascii十六进制bytestream输出解码为二进制
  • od将输出转储为格式wireshark can read
  • text2pcap(wireshark)向SMB包附加假以太网和IP报头,并将pcap文件写入stdout
  • tshark(wireshark)解码SMB包并显示完整的包详细信息

许可证

此项目pikepike-smb2,是根据戴尔公司的开源项目计划授予的简化BSD许可证发布的, 除了pykerb/下的代码,该代码是根据苹果公司授予的Apache2.0许可发布的。
所有的项目贡献完全反映了各自的作者,而不是戴尔公司或苹果公司

有关许可信息,请参阅文件LICENSE。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向第二个组合框模型项添加数组值从第一个组合框所选项获取数组名称?   使用Java与WebSphere的SSL握手错误   eclipse线程“main”Java中的第一个Java程序异常。lang.NoClassDefFoundError   java将Javafx应用作为Web应用移植的最佳方式   IDE的java右JVM文件夹   java如何在基本适配器中停止文本到语音   java If block使用substring和equals方法以假值执行   在本例中,如何在java中返回多个值?   java第二个主类在maven构建期间覆盖第一个主类   如何在java中设置运行时ArrayList的泛型类型?   java从主机读取文件