如何在mount应用程序li​​nux中修改源端口

时间:2014-06-11 14:01:14

标签: linux sockets mount

我需要修改mount app,以便我可以将源端口指定为一个特定的端口,而不是操作系统随机生成的。

例如,假设我们正在尝试使用ip 10.0.0.55在我们要执行mount的计算机上安装文件系统10.0.0.40

所以当你执行命令时,目标端口(即端口10.0.0.55正在侦听)很好但是当你执行命令时,源端口是由os随机生成的,这是10.0.0.55用来回复的端口回到另一台PC,这是PC在路由器后面所以必须有一个特定的端口

我尝试修改函数bindresvport()的任何想法,并将该套接字绑定到特定端口,但它似乎无法正常工作

2 个答案:

答案 0 :(得分:0)

假设这是一个NFS挂载,您可以使用以下文档中的指南设置端口:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-nfs-nfs-firewall-config.html

不可否认,这适​​用于Red Hat,但应该很容易适应其他变种。

答案 1 :(得分:0)

我已经解决了这个问题,答案是创建一个新的struct sockaddr,为该struct打开一个套接字将它绑定到你想要的端口,然后调用connect到mount客户端正在使用的struct和你的socket。这样你就强迫内核不要为你选择src端口。 请注意,当您要求服务器(您尝试安装的文件系统所在的位置)时,您必须执行相同的操作。 同样在mount的末尾,客户端从内核调用mount函数,并为src端口再次设置一个随机端口,所以如果你想修改内核,这种方法也很好。

也许我没有很好地解释自己,当我提出问题时,我想要完成的是从计算机B在计算机A中安装文件系统。 计算机A在路由器后面 计算机B位于路由器的外部网络或类似于isp网络

例如

计算机A会让我们说192.168.1.99 路由器(网关)192.168.1.1 Router Wan Ip 10.0.0.26 计算机B 10.0.0.55

因此,为了使计算机B与计算机A通信,必须在路由器中打开一个端口以允许流量通过。当你发出一个mount时,src端口是在512-1023范围内随机生成的,恰好是计算机B发送信息的端口。 我通过在路由器上打开它来解决这个问题,我不能修改内核。我希望这有助于@mikea