linux 查看进程套接字,linux – 如何找到哪个进程绑定套接字而不是监听?

当我使用nc来监听端口时,它会显示出来

nc -l -vv -p 21000

retrying local 0.0.0.0:21000 : Address already in use Can't grab 0.0.0.0:21000 with bind

但是我无法使用工具netstat / ss找到哪个任务占用了这个端口

netstat -an|grep 21000

没有找到

ss -a|grep 21000

没有找到

这个端口被我的java程序占用,代码是:

public class Test1 {

public static void main(String[] args) throws InterruptedException {

Socket s = new Socket();

try {

s.bind(new InetSocketAddress("127.0.0.1",21000));

} catch (IOException e) {

e.printStackTrace();

}

Thread.sleep(500000000000L);

}

}

当我绑定一个套接字,但不要与连接或监听一起使用它.

我进入/ proc / [java task id] / fd,找到这个socket的inode是“socket:[3073501]”

但即使在/ proc / net / tcp或/ proc / net / tcp6中我也找不到inode或端口

是否有任何方法可以找到绑定套接字但不监听或连接的进程.

谢谢.

我看到linux 3.10.0-327源代码.我认为文件/ proc / net / tcp的内容来自net / ipv4 / tcp_ipv4.c.

在tcp_proc_register方法中,

static void *tcp_get_idx(struct seq_file *seq,loff_t pos)

{

void *rc;

struct tcp_iter_state *st = seq->private;

st->state = TCP_SEQ_STATE_LISTENING;

rc = listening_get_idx(seq,&pos);

if (!rc) {

st->state = TCP_SEQ_STATE_ESTABLISHED;

rc = established_get_idx(seq,pos);

}

return rc;

}

它仅显示侦听中的socks或从tcp_hashinfo建立的socks.但是tcp_hashinfo有三个结构

struct inet_bind_hashbucket *bhash;

struct inet_listen_hashbucket listening_hash[INET_LHTABLE_SIZE];

struct inet_ehash_bucket *ehash;

bhash可用于绑定.

但是不会在/ proc / net / tcp中导出.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值