我需要修改mount app,以便我可以将源端口指定为一个特定的端口,而不是操作系统随机生成的。
例如,假设我们正在尝试使用ip 10.0.0.55在我们要执行mount的计算机上安装文件系统10.0.0.40
所以当你执行命令时,目标端口(即端口10.0.0.55正在侦听)很好但是当你执行命令时,源端口是由os随机生成的,这是10.0.0.55用来回复的端口回到另一台PC,这是PC在路由器后面所以必须有一个特定的端口
我尝试修改函数bindresvport()的任何想法,并将该套接字绑定到特定端口,但它似乎无法正常工作
答案 0 :(得分:0)
假设这是一个NFS挂载,您可以使用以下文档中的指南设置端口:
不可否认,这适用于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