ファイル共有は基本的にユーザー名とパスワードありきで接続すると思いますが、閉鎖的なLAN環境などではパスワード無しのGuestログインが許可されていたりする場合もあると思います。
そんな若干緩い環境でもpysmbでファイル共有してみたいと思います。
インデックス
pysmbの使い方(接続・切断)
pysmbの使い方(ファイル受信)
pysmbの使い方(ファイル送信)
pysmbの使い方(ロギング)
pysmbの使い方(匿名接続)
実行環境
クライアント
- Windows 10
- Python 3.6.3
- pysmb 1.1.22
サーバー
- Windows 7
- User : IEUser
- Pass : Passw0rd!
- HostName : IEWIN7
- Domain : WORKGROUP
- IPAddress : 172.28.0.198
匿名アクセスを有効にする
WindowsVista以降の場合
「パスワード保護共有」をオフにすることで簡易に匿名アクセスが有効になります。この方法ではGuestアカウントを有効にする必要もありません。
コントロールパネルのネットワークと共有センターを開き、左側のメニューから共有の詳細設定を選びます。パスワード保護共有という項目があるのでオフに設定します。
WindowsXPの場合
簡易ファイルの共有機能
XPでは「簡易ファイルの共有機能」がデフォルトでオンになっています。これが有効になっていると、全てのアクセスが匿名アクセスという扱いになります。
しかしワークグループ環境でしか使えない為、ドメイン環境の場合は次の方法で匿名アクセスを有効にする必要があります。
設定内容はフォルダオプションから確認できます。
Guestの有効化とポリシーの設定
まず以下のコマンドでGuestアカウントを有効化します。
net user guest /active:yes
net user guest *
パスワードを求められるので、空パスワード(入力なしでEnter)を設定。
次にファイル名を指定して実行でgpedit.mscを実行します。グループポリシーが開くので、コンピュータの構成-Windows の設定-セキュリティの設定-ローカル ポリシー-ユーザー権利の割り当てを開き、ネットワーク経由でコンピュータへのアクセスを拒否するというポリシーの設定からGuestを削除します。
pysmbで匿名アクセス
匿名アクセス可能な場合はusernameとpasswordが指定不要になります。
# main.py
import platform
from smb.SMBConnection import SMBConnection
conn = SMBConnection(
'',
'',
platform.uname().node,
'IEWIN7')
conn.connect('172.28.0.198', 139)
print(conn.echo('echo success'))
conn.close()
その為、上記のように空白でもOKです。
ダイレクトホスティングSMBを使う場合はもっと雑に接続できます。
from smb.SMBConnection import SMBConnection
conn = SMBConnection(
'a',
'a',
'a',
'a',
is_direct_tcp=True)
conn.connect('172.28.0.198', 445)
print(conn.echo('echo success'))
conn.close()
remote_nameのみ空白だとアクセスエラーになりますが、何か一文字でも設定すればOKです。それ以外の引数(username,password,my_name)は空白でも任意の文字列でもなんでもOKです。
このように匿名アクセスを有効にすると実質IPのみの指定でアクセス可能になります。
