首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试linux网络:已经使用的地址

问如何调试linux网络:已经使用的地址
EN

Server Fault用户
提问于 2016-10-24 06:24:58
回答 1查看 6.8K关注 0票数 10

我有一个Slackware linux盒,在这里我不能启动任何在本地主机上的一个特定端口上侦听的服务。通过使用strace,我发现错误发生在bind()调用上,错误是EADDRINUSE (Address already in use):

bind(3, {sa_family=AF_INET, sin_port=htons(874), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)

这种情况发生在我试图开始监听该端口的任何进程中,因此它与进程本身无关。上面的strace输出来自命令strace -ff nc -l -p 874 -s 127.0.0.1。

因此,这意味着已经有一个进程正在侦听localhost端口874。然而,我似乎找不到它。以下命令都不返回任何内容:

代码语言:javascript
复制
netstat -aplunt | grep :874
netstat -na | grep :874
lsof -i :874
lsof -i tcp | grep 874
fuser 874/tcp
socklist | grep 874
iptables -t filter -S | grep 874
iptables -t nat -S | grep 874
iptables -t mangle -S | grep 874
conntrack -L | grep 874

如果我尝试在0.0.0.0:874上侦听,它会失败,但也会出现同样的错误。侦听nic上配置的IP地址之一可以正常工作,侦听127.0.0.2:874也可以。监听不同的端口也很好,在127.0.0.1或0.0.0.0上也是如此。

所以,现在我很好奇。如何找出为什么网络堆栈在这里返回EADDRINUSE?我还可以查看哪些其他内容,或者可以运行哪些其他命令来获取更多信息?

更多信息:

  • 内核4.1.31
  • 这里不使用Selinux。
  • 尝试连接到127.0.0.1并返回telnet“连接被拒绝”
  • 我将这些命令作为root运行
EN

回答 1

Server Fault用户

回答已采纳

发布于 2016-10-26 06:51:02

如果您的主机是NFS客户端,它可能使用源端口874进行NFS安装。我怀疑,因为连接不是来自用户空间,所以到目前为止您使用的工具可能看不到它。

考虑以下几点之一:

  • 调整sysctls sunrpc.min_resvport和sunrpc.max_resvport (默认为665和1023)以更改NFS客户端使用的源端口的范围
  • 在此范围外使用侦听端口
  • 使用NFS挂载上的noresvport选项来使用非特权范围(可能对安全有影响)
票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/810841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档