我知道如何使用 lsof 或 netstat 做相反的事情(找出哪个进程打开了给定的端口),但是对 Google 的广泛研究并没有帮助我解决相反的问题。
我知道我可以将“netstat -np”与一些 grep 和 sed 结合使用,但它看起来很笨拙。是否有反向版本的“lsof -i tcp:80”可以显示给定进程打开的所有本地端口?
我正在运行一个在端口 59380 上运行服务的服务器。有超过 1000 台机器连接到该服务。一旦我需要重新启动服务,所有这些机器都会同时连接。
这造成了一些麻烦,因为我在 kern.log 中看到了该日志条目
TCP: Possible SYN flooding on port 59380. *Sending cookies*. Check SNMP counters.
Run Code Online (Sandbox Code Playgroud)
所以我将 sysctl 更改net.ipv4.tcp_syncookies为 0,因为端点无法正确处理 tcp syn cookie。最后我重新启动了我的网络以获取生产中的更改
下次我不得不重新启动服务时,记录了以下消息
TCP: Possible SYN flooding on port 59380. *Dropping request*. Check SNMP counters.
Run Code Online (Sandbox Code Playgroud)
如何防止系统执行此类操作?所有必要的反制措施都由 iptables 完成...
查看下图,摘自 Ilya Grigorik - High Performance Browser Networking 一书中,我可以理解 SYN 数据包选择一个随机序列号,该序列号在 SYN ACK 数据包 (N+1) 中递增。最后,在 ACK 数据包中,序列 (N+1) 和确认 (N+1) 编号都递增。
当使用Wireshark我测试得到了ACK分组具有确认号= N + 1,但序列号= N。当作者说在 ACK 数据包中序列号和确认号都增加时,这是作者的错误吗?

我什至不确定这是否可能......另外,请原谅我对这个主题的无知。
我正在寻找的是“某种东西”,它允许我将所有到达主机 A 的 TCP 流量重定向到主机 B,但基于一些规则。
假设主机 A(中介)从域 X 的主机接收请求(假设一个简单的 HTTP 请求)。在这种情况下,它让它通过并由主机 A 本身处理。
现在,假设主机 A 收到来自域 Y 的主机的另一个 HTTP 请求,但这一次,由于一些可自定义的规则,主机 A 将所有流量重定向到主机 B,主机 B 能够像直接来一样处理它来自域 Y。而且,此时,主机 B 和域 Y 的主机都能够自由通信(当然,认为主机 A)。
注意:所有这些主机都在 Internet 上,而不是在 LAN 内。
如果解释不够清楚,请告诉我。
我的一位老师说,当您浏览启用了文件/目录列表的 apache2 等 Web 服务器时,它会秘密打开 ftp 服务器来传输文件。
这让我很困惑,尽管在网络方面他确实比我了解得更多,因为他无法向我解释以便我理解。
如果我没有 ftp 服务器或该端口正在运行,那么该服务如何发送它?apache2 是否内置了我不知道的 ftp?如果 apache2 目录列表请求文件,那么它是通过 HTTP 还是 FTP 发送的?
我们有一些 PHP-FPM 服务器,当它们需要数据库连接时,它们会连接到 HAProxy 服务器,该服务器会选择要使用的数据库服务器并打开连接。当我们想要对 HAProxy 服务器进行一些维护(例如需要重新启动 HAProxy 的配置更改)时,过程如下:
当第 2 步发生时,此时打开的 mysql 连接会发生什么?根据此 TCP 会话和 IP 更改问题,连接将被丢弃。真的是这样吗?如果是这样,可以采取什么措施来防止这种情况发生?是否可以以某种方式强制连接使用服务器的主要(非浮动)IP?
我们也有一个类似的设置,两个 Nginx 服务器上运行了 Keepalived,我们计划执行相同的过程。如果我们这样做,同样的问题也适用 - 当 IP 移动到另一台服务器时,现有的 http 连接会发生什么?
我感谢您的帮助。
假设我通过 SSH 从客户端连接到服务器,并且在会话过程中我拔掉了服务器的网线。在客户端上,ssh 连接保持活动状态大约 15 分钟,然后失败并显示“Broken pipe”消息。如何调整此超时?就我而言,我需要减少它,以便 SSH 在出现网络问题时尽早失败。
我找到了很多关于如何避免空闲会话断开连接的信息,或者有更长的连接设置超时,但没有关于已建立的 SSH 连接本身的超时。我也知道在 TCP 级别有这样的超时,但我怀疑 SSH 用不同的值设置了套接字,因为 TCP 超时通常在一分钟左右,而不是我用 SSH 观察到的 15 分钟。
客户端和服务器都是 Ubuntu 14.04 服务器版。
谁能告诉我 WireShark 中的“长度”列指的是什么?
我很确定它是电线上整个框架的“大小”。我做了一些计算,但我没有得到 WireShark 报告的数字。
有谁知道“长度”包括什么?我在某处读到序言(7 个八位字节)、帧起始分隔符(1 个八位字节)和 FCS(4 个八位字节)通常不会被捕获,但这是否意味着 WireShark 仍然添加这些数字以进行“长度”计算?
HTTP 请求上的 keep-alive 和 TIME_WAIT 中的 tcp 套接字之间有什么关系 - 它们应该相关吗?
此外,系统和网络服务器设置是否应该保持一致,例如server.max-keep-alive-idle = 60?根据如何减少 TIME_WAIT 中的套接字数量?在 Linux 中,TIME_WAIT 状态被硬编码为 60 秒(至少对于 Linux 的 Ubuntu/Debain 值)。
在 lighttpd 中是默认值server.max-keep-alive-idle = 5,他们建议在高负载时甚至更低。如果 tcp 套接字可用,则在 5 秒后关闭 http 请求似乎是一种浪费——当然,假设设置按照net.ipv4.tcp_tw_reuse = 1它在锡上所说的进行。
这个相关的问题 - tcp 如何保持连接有效?[关闭]触及了这个问题,但没有为我完全回答。
如何授予应用程序访问权限以侦听一个特定端口,而无需以管理员身份运行它或禁用 UAC?
根据策略,必须从旧服务器 (Windows Server 2003) 过渡到 Windows Server 2012。
此服务器的主要目的是运行第三方应用程序,该应用程序侦听特定(非标准)端口并响应请求。(它必须手动运行,它不是 Windows 服务。)
在旧服务器上,只要防火墙设置为允许该端口打开,它就可以像任何旧用户一样正常运行。在 2012 年,即使防火墙配置为允许它,它也必须以管理员身份运行才能被允许打开端口。
我理解出于安全目的这样做的必要性(任意用户不应该能够打开服务器上的任意端口,即使他们有登录访问权限)但是当我真的需要允许访问时呢?
注意:我不希望应用程序以管理员身份运行。我不想禁用 UAC。我希望所有安全措施都保持原状,只允许这个应用程序(它可以有自己的用户帐户)能够打开一个端口并监听它。
我搜索了一些有希望的搜索词,但只得到了有关 Windows Server 2012 自己的服务需要哪些端口的信息。
编辑有关应用程序的更多信息。它只是使用带有bind()和listen()和的普通Winsock accept()。它不使用任何像 HTTPListener 这样的 Windows 服务。那么,当以普通用户身份运行时,如何追踪导致套接字无法打开的原因?