首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当OSX Finder“连接到服务器…”时,什么会导致pysmb失败?成功?

问当OSX Finder“连接到服务器…”时,什么会导致pysmb失败?成功?
EN

Stack Overflow用户
提问于 2015-05-01 03:16:44
回答 1查看 2K关注 0票数 3

(最初是在StackOverflow上问的,但我认为这里有更合适的专家):

我正在尝试使用python脚本(在OSX 10.10上运行)从远程samba共享(在windows服务器上)传输文件。我可以使用Finder的Go->"Connect to Server...“挂载共享。对话框中,但是当我尝试对python (v2.7.6)中的pysmb模块使用相同的凭据时,我得到“连接被拒绝。”:

代码语言:javascript
复制
>>> from smb.SMBConnection import SMBConnection
>>> conn =SMBConnection('myuser', 'mypassword','me','remote-server-netbios-name')
>>> assert conn.connect('remoteserver.mycompany.com')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/smb/SMBConnection.py", line 103, in connect
    self.sock.connect(( ip, port ))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 61] Connection refused

类似地,如果我尝试使用NetBIOS包来获取远程服务器的名称(以确认我是否正确),它就会超时:

代码语言:javascript
复制
>>> from nmb.NetBIOS import NetBIOS
>>> 
>>> def getBIOSName(remote_smb_ip, timeout=30):
...     try:
...         bios = NetBIOS()
...         srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
...     except:
...         print >> sys.stderr, "Looking up timeout, check remote_smb_ip again!!"
...     finally:
...         bios.close()
...         return srv_name
... 
>>> getBIOSName('remoteserver.mycompany.com')

同样的代码可以很好地从我家里的ubuntu服务器上的samba共享中获取文件。我怀疑这可能是服务器本身的一些权限或防火墙问题。对于需要打开哪些端口/权限才能正常工作,您有什么想法吗?

编辑:根据下面boardrider的建议,我通过指定端口445来尝试连接功能。但是,这会生成一个"Connection reset by peer“错误:

代码语言:javascript
复制
>>> assert conn.connect('remoteserver.mycompany.com', 445)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/smb/SMBConnection.py", line 112, in connect
    self._pollForNetBIOSPacket(timeout)
  File "/Library/Python/2.7/site-packages/smb/SMBConnection.py", line 511, in _pollForNetBIOSPacket
    d = self.sock.recv(read_len)
socket.error: [Errno 54] Connection reset by peer
EN

回答 1

Stack Overflow用户

发布于 2016-08-31 03:21:23

这对我很有效: 1.用户名没有域名部分2. is_direct_tcp=True 3.连接到端口445

代码语言:javascript
复制
conn = SMBConnection('user', 'password', socket.gethostname(), 'remote_server_name', 'domain_name', is_direct_tcp=True)
assert conn.connect('server_ip', 445)

(在SMB2上) SMB.SMBConnection信息身份验证成功!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29991279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档