我知道 127.0.0.1 ~ 127.255.255.254 是大多数现代操作系统的环回 IP 地址,这些 IP 地址可以用来指代我们自己的计算机。
但什么是 0.0.0.0?好像也指本地电脑,那有什么区别呢?
并且,您能否为我解释以下 IP 连接:
我正在尝试验证在与我正在运行的 Tomcat 网络服务器通信期间是否正在使用 HTTP 持久连接。目前,我可以从浏览器(例如 Chrome)检索服务器上的资源,并使用 netstat 验证连接已建立:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 curl,则在 netstat 中看不到服务器上的连接。
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
Run Code Online (Sandbox Code Playgroud)
我也尝试使用以下 curl 命令:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Run Code Online (Sandbox Code Playgroud)
这是我的客户端机器的 curl 版本:
[server:/tmp]$ curl -V
curl 7.19.5 (x86_64-unknown-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 libssh2/1.1
Protocols: tftp ftp telnet dict http file https ftps scp sftp
Features: …Run Code Online (Sandbox Code Playgroud) 我有一个进程(dbus-daemon),它通过 UNIX 套接字有许多打开的连接。这些连接之一是 fd #36:
=$ ps uw -p 23284
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
depesz 23284 0.0 0.0 24680 1772 ? Ss 15:25 0:00 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
=$ ls -l /proc/23284/fd/36
lrwx------ 1 depesz depesz 64 2011-03-28 15:32 /proc/23284/fd/36 -> socket:[1013410]
=$ netstat -nxp | grep 1013410
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it …Run Code Online (Sandbox Code Playgroud) 好吧,这让我毛骨悚然 - 我看到了大约 1500-2500 个:
root@wherever:# netstat
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:60930 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60934 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60941 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60947 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60962 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60969 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60998 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60802 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60823 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60876 localhost:sunrpc TIME_WAIT
tcp 0 0 localhost:60886 localhost:sunrpc …Run Code Online (Sandbox Code Playgroud) 这个问题类似于网络端口打开,但没有附加进程?
我已经从那里尝试了一切,查看了日志等......但找不到任何东西。
我的 netstat 显示了一个 TCP 侦听端口和一个没有 pid 的 UDP 端口。当我在 lsof 中搜索这些端口时,什么也没有出现。
netstat -lntup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:44231 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:55234 0.0.0.0:* -
Run Code Online (Sandbox Code Playgroud)
以下命令不显示任何内容:
lsof | grep 44231
lsof | greo 55234
fuser -n tcp 44231
fuser -n udp 55234
Run Code Online (Sandbox Code Playgroud)
重新启动后,除了新的端口号外,那些“相同”的两个连接还在那里:
netstat -lntup
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:45082 0.0.0.0:* LISTEN -
udp 0 0 0.0.0.0:37398 …Run Code Online (Sandbox Code Playgroud) 我正在使用这个简单的命令来监控我的 Debian 服务器上的连接(以处理最近的一些 DoS 攻击):
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)
我如何连续运行它?所以它会每分钟(或任何给定的时间,当然)刷新一次。我试过看:
watch -n 30 "netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n"
Run Code Online (Sandbox Code Playgroud)
但是它将带有连接数的好列表的输出更改为如下所示:
1 tcp 0 10015 [LOCAL IP]
...
1 Proto Recv-Q Send-Q Local Address Foreign Address State
1 Active Internet connections (w/o servers)
Run Code Online (Sandbox Code Playgroud)
所以没有显示外部IP。有什么我错过了吗?
这是原始输出的样子:
2 [IP ADDRESS]
4 [IP ADDRESS]
4 [IP ADDRESS]
4 …Run Code Online (Sandbox Code Playgroud) 我有一个端口被我需要杀死的进程阻止。(一个崩溃的小 telnet 守护进程)。该进程已成功终止,但端口仍处于“FIN_WAIT1”状态。它没有出来,超时似乎设置为“十年”。
我发现释放端口的唯一方法是重新启动整个机器,这当然是我不想做的事情。
$ netstat -tulnap | grep FIN_WAIT1
tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在不重新启动的情况下解锁此端口?
我在打开网络端口时遇到了奇怪的情况。我的主要问题是,为什么没有与开放 TCP 端口关联的程序:
netstat -ln --program
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN -
Run Code Online (Sandbox Code Playgroud)
对于我的特定情况,应该有一个 nrpe 守护程序(opsview 安装)侦听端口 5666,但没有运行 nrpe 守护程序。如果我尝试启动它,它会立即退出。
lsof -i :5666也不显示任何输出。我的系统上没有运行 (x)inetd。
更新
是的,我以 root 身份运行这些命令。Telnet 可以,但从来没有任何响应。
经过进一步调查,我发现了一个内核错误dmesg:这是一个运行较旧内核的 EC2 实例(实际上是其中几个)(2.6.16 显然不稳定)。停止崩溃的修复方法是升级内核。
看起来内核崩溃的方式导致进程消失并保持端口打开。
我有 ubuntu/hardy 服务器,内核为 2.6.24-23-server 和 netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
Run Code Online (Sandbox Code Playgroud)
问题是我们有很多 ESTABLISHED 连接在netstat -ntap输出中不显示 PID 或程序名称。Netstat 是从 root 调用的,没有 chroots、grsecurity,也没有类似的东西(或者我被告知 :)。
关于可能出什么问题的任何想法?
更新
lsof -n -i 工作正常,并显示连接的 pid/进程名称。
我正在尝试将端口 80 用于我的应用程序服务器,但是当我执行“netstat -aon”时,我得到
TCP 0.0.0.0:80 0.0.0.0:0 聆听 4
当我在任务管理器中查找进程时,它显示 PID 4 是 SYSTEM,就是这样,而不是扩展名......没有,只是“SYSTEM”。这里发生了什么?
我害怕结束这个过程,我该怎么办?