2015-04-30 3 views
3

(первоначально спросил на StackOverflow, но я думаю, что есть более подходящие специалисты здесь):Что может привести к сбою pysmb при успешном выполнении OSX Finder «Подключение к серверу ...»?

Я пытаюсь передать файл из доли удаленного самбы (на сервере Windows) в питон скрипт (работает на OSX 10,10). Я могу установить общий ресурс, используя диалог Goer -> «Connect to Server ...» Finder, но когда я пытаюсь использовать те же учетные данные с модулем pysmb в python (v 2.7.6), я получаю «Connection Refused». «:

>>> 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, чтобы получить имя удаленного сервера (для подтверждения я получаю, что правильно), он просто таймаут:

>>> 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') 

То же код отлично работает, чтобы получать файлы из общей папки samba на моем сервере ubuntu дома. Я подозреваю, что могут быть некоторые разрешения или проблемы с брандмауэром на самом сервере. Любые идеи о том, какие порты/разрешения необходимо открыть, чтобы сделать эту работу?

EDIT: С предложением boardrider по ниже, я пытался соединять функцию, указав порт 445. Однако, который генерирует «сброс соединения по сверстников» Ошибка:

>>> 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 
+0

В документации дается 'conn.connect (server_ip, 139)', поэтому, возможно, порт, который вы используете в скрипте, неверен. Также, как и Windows 2000, SMB работает по умолчанию с тонким слоем, похожим на пакет сообщений сеанса службы сеансов NBT, поверх TCP, используя TCP-порт 445, а не TCP-порт 139, - функцию, известную как «SMB с прямым хостом» "._ – boardrider

+0

Спасибо за подсказку. Я изначально указал 139 явно, но это не имело никакого значения, поэтому я попытался использовать значение по умолчанию. Тем не менее, оба результата «Соединение отказались» выше. Когда я попробовал это с 445, у меня был другой результат. Я обновлю свой вопрос выше, поскольку он более разборчив, чем результат в этом комментарии. –

ответ

0

Это работало для меня: 1. имя пользователя не имеет доменную часть 2. is_direct_tcp = True 3. подключение к порту 445

conn = SMBConnection('user', 'password', socket.gethostname(), 'remote_server_name', 'domain_name', is_direct_tcp=True) 
assert conn.connect('server_ip', 445) 

SMB.SMBConnection INFO Authentication (на SMB2) успешной!

Смежные вопросы