当我使用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);
}
}
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中导出。
我在Ubuntu下测试了您的Java程序。
如何找到绑定套接字但不侦听或连接的进程:
LSOF
lsof | grep "can't identify protocol"
您将得到如下结果:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 29644 29653 stephan 12u sock 0,7 0t0 312066 can't identify protocol
请注意类型sock
和名称Can't identify Protocol
。
这是怎么工作的?看看LSOF的常见问题:
为什么基于/proc的lsof报告某些套接字文件“无法识别协议”?
/Proc-based lsof可能报告:
COMMAND PID ... TYPE ... NODE NAME
pump 226 ... sock ... 309 can't identify protocol
这意味着它无法识别打开的套接字文件正在使用的协议(即AF_*指定)。Lsof通过将与/proc//fd条目相关联的节点号与/proc/net子目录的选定文件中找到的节点号匹配来标识协议。
...
您可能无法找到所需的节点号,因为并非所有内核协议模块都完全支持/proc/net信息。
验证过程
lsof输出中的PID为29644。
ls -l /proc/29644/fd
...
lrwx------ 1 stephan stephan 64 Jul 7 22:52 11 -> socket:[312064]
lrwx------ 1 stephan stephan 64 Jul 7 22:52 12 -> socket:[312066]
...
grep 312066 /proc/net/*
结果为空。
问题内容: 我正在使用slf4j登录我的应用程序。我得到slf4j的目的。我想知道如何找出当前绑定到哪个日志记录库slf4j。我的引用库中有log4j。我假设slf4j已将自身绑定到log4j。 我想知道的是,有什么方法可以明确确认这种绑定吗? 问题答案: 只需执行SLF4J的操作来发现绑定: 现在,你可以尝试找出什么是实际执行的logback在我的情况: 打印:
我创建了一个新的Android项目,目标是API15,使用。自动生成的是: 将添加到它失败,因为。 所以我尝试创建另一个项目,这次以27级API为目标,得到了同样的结果,我得出的结论是我需要的API是28级(并放弃了,因为我不想以如此限制的内容为目标)。有人在评论另一个问题时指出,情况并非如此,因此这个问题是双重的。 > 在哪里可以找到一个特定类针对哪个API级别?WebViewAssetLoad
问题内容: 我的应用程序在CentOS 5.5上运行。我正在使用原始套接字发送数据: 如何将此套接字绑定到特定的网络接口(例如eth1)? 问题答案: 第一行:设置变量 第二行:告诉程序绑定到哪个接口 第3-5行:获取接口名称的长度,并检查其大小是否太大。 六行:设置套接字的套接字选项,绑定到设备。 setsockopt原型: 此外,请确保您包括,和头文件
问题内容: 当我在代码中指定要连接的IP时,我有一个小型的单边消息发送器,但是,我无法让套接字接受来自任何IP的连接。这是问题所在。 该是本地主机,如果我手动输入IP,例如,它的工作原理,但是,我怎么能离开它向所有人开放?还是我为此使用了错误的连接类型? 问题答案: 如果要绑定到所有可用的IPv4地址,请指定为IP地址。如果您在路由器后面,并且希望您的套接字可以通过Internet访问,而不是仅在
我有一个用例,其中处理MS的单个kafka流将有一个处理器和一个消费者,消费者将使用处理器输出消息。类似于下面github中的示例 https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/kafka-streams-samples/kafka-streams-message-channel 在执行上面的示例时,
问题内容: 我正在使用一个守护程序,该守护程序侦听UDP广播数据包,并通过UDP进行响应。当一个包进来,我想知道哪个IP地址(或NIC)的包来到 TO 这样我就可以与该IP地址作为源地址进行响应。(出于很多麻烦的原因,我们系统的某些用户希望将同一台计算机上的两个NIC连接到同一子网。我们告诉他们不要,但是他们坚持要这样做。我不需要提醒我这是多么的丑陋。 ) 似乎没有办法检查数据报并直接找出其目的地