我需要修改挂载应用程序,这样我就可以指定源端口为一个特定的端口,而不是操作系统随机生成的端口。
例如,假设我们试图在ip 10.0.0.55的计算机中挂载文件系统,而我们要执行挂载的计算机是10.0.0.40
因此,当您执行命令时,目标端口(即端口10.0.0.55正在侦听)很好,但是当您执行命令时,源端口是由os随机生成的,也就是说,端口10.0.0.55用于回复另一台pc,即pc位于路由器后面,因此必须有一个特定的端口。
我尝试过修改函数bindresvport()调用的地方并将该套接字绑定到特定端口的任何想法,但它似乎不起作用
发布于 2014-07-03 12:57:11
我已经解决了这个问题,答案是创建一个新的sockaddr,为该结构打开一个套接字,将其绑定到您想要的端口,然后调用连接到挂载客户端正在使用的结构以及您的套接字。这样,您就可以强制内核不为您选择src端口。请注意,当您要向服务器(您试图挂载的文件系统在哪里)请求文件句柄时,您必须做同样的事情。在挂载结束时,客户端从内核调用挂载函数,它再次为src端口设置一个随机端口,所以如果您也想修改内核,这种方法是很好的。
当我提出这个问题时,也许我没有很好地解释自己,但我想要完成的是从计算机B安装一个文件系统。计算机A在路由器后面,计算机B在路由器的外部网络上,或者类似于isp网络。
例如
计算机A将让said 192.168.1.99路由器(网关) 192.168.1.1路由器万叶10.0.0.26计算机B 10.0.0.55
因此,为了让计算机B与计算机A对话,必须在路由器中打开一个端口,以允许流量通过。当您发出挂载时,src端口将在512-1023范围内随机生成,并且恰好是计算机B发送信息到的相同端口。我通过打开路由器上的范围来解决这个问题,这不是我修改内核的一个选项。我希望这能帮到@mikea
发布于 2014-06-11 14:12:09
https://stackoverflow.com/questions/24164925
复制相似问题