SMB服务搭建及各端非标端口连接配置

写在前面

目前有个pc(win10)同步文件到ipad的需求,代替使用微信带来的数据空间占用问题。

初始阶段的方案是pc端共享文件夹,ipad使用“文件”app接入,每到次日这个同步就会失效ipad无法连接到共享目录。起初以为是重启导致共享延迟等,进而改变方案,在linux端搭建smb服务,pc、ipad作为客户端接入。起初不算顺利,因为在端口(445)都畅通的情况下,仅有linux互通linux是通畅的,但是与pc、ipad、android,连接不通,百思不得解。稍后猛然忆起早年间爆出过445端口漏洞问题,进而想到是否是网关屏蔽了445的原因,遂将手机连接4G网络,顺利联通;而后通过修改SMB服务端端口,顺利联通各端,在此记录下过程及遇到的问题。

linux SMB服务安装

安装命令

yum install -y samba

配置文件路径

 /etc/samba/smb.conf

配置文件设置

需要为SMB服务设置非root登录账号

创建新用户

useradd -m username

设置登录密码

passwd username

设置smb用户的密码(此密码非登录密码,smb用户与登录用户相同,但是密码不同)

smbpasswd username

设置共享目录,比如:/share,并设置权限

mkdir /share
chmod 777 /share
chown -R username:username /share

SMB服务启动

systemctl restart smb.service
systemctl restart nmb.service

状态查看

systemctl status smb.service
systemctl status nmb.service

查看服务占用端口

ss -anp|grep smb

SMB文件共享标准端口(445)接入

PC(win10)

开启SMB支持

设置网络驱动器

成功后会在此电脑,网络位置中出现图标;

如果点击确认后过一阵“输入网络凭证弹框”依然弹出或者提示“网络错误”或提示“ 找不到网络路径”,说明网络、端口不通,需要检查;
如果确认按钮上方出黄色异常信息,说明网络是通畅的,按照异常调整就好

Android

图中是三星手机演示,在我的文件-网络存储中

Apple

打开“文件”App

左上角三个点-连接服务器

输入服务地址:smb://ip/share

选择注册用户,输入用户名、密码

SMB文件共享非标准端口接入(非标端口,如:1234)

SMB服务配置文件修改

/etc/samba/smb.conf
global下增加smb ports = 1234 (注意有空格)

smb服务修改为1234
重启
    systemctl restart smb.service
    systemctl restart nmb.service
修改防火墙
修改云服务安全组
外部测试端口连通性 telnet ip 1234

PC(win10)

映射网络驱动器无法连接非标端口的SMB服务,但是可以使用端口转发达到间接访问的目的

配置端口转发

  1. 查看端口占用情况

netstat -ano | findstr 445

如果有返回信息,说明被占用

  1. 避免445端口被占用。关闭Server服务,并禁用,服务名:LanmanServer

  1. 重启

  1. 再次查看端口占用情况

若无信息返回则说明没有占用

  1. 配置端口转发

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=SMB服务地址  connectport=SMB服务端口
  1. 查看端口转发

netsh interface portproxy show all

如下图即为配置成功

  1. 其他

清除所有端口转发规则

netsh interface portproxy reset

连接SMB服务

其他配置相同,区别在地址

访问流程
本地访问\\127.0.0.1\share ——> 系统本地检索samba服务 ——> 根据端口转发将445端口的请求自动转发到设定的IP地址和端口 ——> 访问成功

Adnroid

更改端口号为1234,其他配置相同

Apple

不能使用“文件”App连接非标端口的SMB服务,需要下载“ES文件浏览器”,打开后点击左侧SMB按提示操作即可连接。注:文件变化需要手动刷新

参考连接
https://blog.csdn.net/weixin_43726881/article/details/129491719#comments_25689047
https://blog.csdn.net/zsdt345a780rfajwet/article/details/107845859

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用Python中的`gdal`库来读取smb地址下的影像。具体操作步骤如下: 1. 安装相应的smbclient库,例如在Ubuntu系统下可以使用以下命令进行安装: ``` sudo apt-get install smbclient ``` 2. 在Python代码中通过`gdal`库打开smb地址下的影像文件,例如: ```python from osgeo import gdal filename = '/vsismb/<username>:<password>@<server>/<share>/<path>/<filename>' dataset = gdal.Open(filename) ``` 其中,`<username>`和`<password>`为smb服务器的登录用户名和密码,`<server>`为smb服务器地址,`<share>`为共享目录名称,`<path>`为影像文件所在的相对路径,`<filename>`为影像文件名称。 注意:与前面回答的问题不同,这里使用的是`/vsismb/`虚拟文件系统,而不是`/vsismb/`。 3. 如果需要对影像进行读取和处理,可以使用`gdal`库的相关函数,例如: ```python # 获取影像的宽度和高度 width = dataset.RasterXSize height = dataset.RasterYSize # 获取影像的地理坐标信息 geotransform = dataset.GetGeoTransform() # 获取影像的投影信息 projection = dataset.GetProjection() ``` 4. 读取影像的像素值,可以使用`ReadAsArray()`函数,例如: ```python band = dataset.GetRasterBand(1) pixel_values = band.ReadAsArray(0, 0, width, height) ``` 其中,`1`表示第一个波段,`0, 0, width, height`表示读取整个影像的像素值。 注意:在使用`/vsismb/`虚拟文件系统时,需要保证smb服务器处于可访问状态,并且具有读取权限。同时,为了保证安全性,建议不要在代码中明文输入密码,可以使用其他方式进行安全认证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

as350144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值