纯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程序在minecraft中移动minecraft角色的相机   java输出文本文件中的变量   java LazyLoadingException在我尝试从多通关系获取对象时出现   java json rest API的错误:ClassCastException:org。json。无法将JSONObject强制转换为组织。json。杰索纳雷   java BigInteger。C中的intValue()等价物#   java大写所有字符,但不包括带引号字符串中的字符   java获取特殊字符   javascript为什么Selenium中的所有getX()调用都需要这么长时间?   rabbitmq rabbitmq java客户端并行消费   如何使用selenium Java在popover窗口中提取文本   对象在java中构造一类对象   java Room数据库未实现   json JSONObject可以使用java保存大的格式化双值吗?   有时限的旅行推销员   java HttpsURLConnection openConnection查询   java无法使用Spring@Entity注释创建MySQL表   lambda Java 8仅映射到值类型集合   java提供OSGi服务而不实现接口   java单个对象重写对象数组,不确定原因