3 lsof的更快替代品 我想提取某个进程的进程ID以便将其关闭。进程是使用特定端口(localhost:3000)的本地Web服务器,我目前正在这样做,以提取相关行: lsof|grep localhost:3000 但是lsof命令太慢。有没有更快的方法来提取进程ID? 8 tcp lsof
1 socat通过TCP进行可靠的文件传输 我知道netcat通常提出的“ wait-> stop”设计的缺点: server$ cat test.dat | nc -q 10 -l -p 7878 client$ nc -w 10 remotehost 7878 > out.dat (这是不可靠的:没有仪表可以等待多长时间,总有可能出现网络瓶颈一秒钟以上。-另一件事->如果您立即知道数据已传输并开始处理它们,为什么还要等待10秒!) 我想要解决方案,并提供可靠且不错的tcp流关闭功能。 我找到了socat,并按如下所述进行关闭man socat: 当其中一个流有效到达EOF时,关闭阶段开始。Socat将EOF条件转移到另一个流,即尝试仅关闭其写流,从而有机会优雅地终止。 我发现以下命令有效: 服务器发送文件: server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat 服务器接收文件: server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat && cat out.txt client$ socat -u … 8 file-sharing tcp file-transfer
2 iptables端口镜像 我需要能够将在端口8001上接收到的数据包的副本复制到端口8002。我尝试了以下操作,但是我收到一个错误---tee未定义。 sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee 8 linux iptables tcp
1 有没有办法查看在TCP端口上侦听的进程是否收到消息? 根据tcpdump,我的服务器收到以下TCP数据包: 12:52:29.603233 00:19:e2:9e:df:f0 00:16:3e:6a:25:3f, ethertype IPv4 (0x0800), length 74: 10.10.10.65.38869 192.168.215.82.22: Flags [S], seq 567054335, win 5840, options [mss 1460,sackOK,TS val 2096335479 ecr 0,nop,wscale 0], length 0 如上所示,这是到TCP端口22的TCP SYN数据包,在我的情况下,该数据包侦听a sshd。我想看看这个TCP数据包是否到达sshd进程。我猜一个选择是sshd在调试模式下重启。但是,是否还有其他聪明的工具/方法可以查看在TCP端口上侦听的进程是否收到消息?如果是TCP SYN数据包,我想这是内核TCP / IP堆栈,它将发送TCP SYN + ACK,而不是sshd? 7 process tcp debugging netfilter
1 默认TCP KeepAlive设置 TCP KeepAlive(套接字选项SO_KEEPALIVE)由三个选项控制:机制触发的时间,探测间隔和失败的探测数,之后声明连接中断。 它们的默认值为: tcp_keepalive_time = 7200 tcp_keepalive_intvl = 75 tcp_keepalive_probes = 9 在1¼分钟后发送探针听起来很合理,在9次失败的探针之后声明失败也可以,但是最初的2小时背后的想法是什么? 甚至tcp(7)说 请注意,底层的连接跟踪机制和应用程序超时可能要短得多。 启用keepalive的要点是防止任何有状态的网络元素丢弃状态信息,但是此类元素往往会在几分钟内断开连接。对于某些受速率限制的服务器,curl短时间--keepalive-time似乎可以显着提高下载的可靠性。 那么为什么默认值这么长? 1 networking tcp defaults