我目前的批处理代码行是:
for /L %%a in (8000,1,8100) do netstat /a /n | find "%%a" | find "LISTENING" || set tmp_freeport=%%a && goto found
Run Code Online (Sandbox Code Playgroud)
我们的想法是找到一个可用于收听的空闲端口,范围为8000-8100.
目前,我正在使用端口8000,因此脚本应该转到8001.
在循环之后%tmp_freeport%,它应该等于8001,并且其值在以后正确使用.
问题是循环无论如何都会继续运行.netstat被调用来搜索范围内的所有101个端口,这显然是无用的和不需要的,因为搜索必须在脚本可以继续之前完成.
谁能告诉我如何打破批量FOR循环?
(或者,如果有更好的方法可以找到自由端口,请参阅我的相关问题)
因此,我在一台服务器上有应用程序A,该服务器每秒向另一台服务器上的应用程序B发送710 HTTP POST消息,该应用程序B正在单个端口上侦听。连接不是保持活动状态;他们是封闭的。
几分钟后,应用程序A报告无法打开与应用程序B的新连接。
我正在两台计算机上连续运行netstat,并且发现每台计算机上都打开了大量TIME_WAIT连接。几乎所有显示的连接都在TIME_WAIT中。从在线阅读来看,这似乎是双方关闭连接后30秒钟(根据/ proc / sys / net / ipv4 / tcp_fin_timeout值,在我们的计算机上为30秒钟)的状态。
我在不断运行的每台计算机上运行一个脚本:
netstat -na | grep 5774 | wc -l
Run Code Online (Sandbox Code Playgroud)
和:
netstat -na | grep 5774 | grep "TIME_WAIT" | wc -l
Run Code Online (Sandbox Code Playgroud)
在应用程序A报告无法打开与应用程序B的新连接之前,每台计算机上的每个计算机的价值似乎已达到28,000。
我已经读过这个文件:/ proc / sys / net / ipv4 / ip_local_port_range提供了可以一次打开的连接总数:
$ cat / proc / sys / net / ipv4 / ip_local_port_range 32768 61000
61000-32768 = 28232,与我看到的大约28,000 TIME_WAIT一致。
我的问题是,在TIME_WAIT中如何有这么多连接。
似乎每秒关闭710个连接,我应该看到在给定时间大约有710 * 30秒= 21300。我想仅仅是因为每秒有710个被打开并不意味着每秒有710个正在关闭...
我唯一能想到的是操作系统缓慢关闭连接。
当我使用 netstat 时,我收到这样的信息 - PID 4 表示 HTTP.SYS
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 10.140.126.48:80 10.140.126.139:57030 ESTABLISHED 4
TCP 10.140.126.48:80 10.140.126.181:57918 ESTABLISHED 4
TCP [::]:80 [::]:0 LISTENING 4
Run Code Online (Sandbox Code Playgroud)
因此,使用netsh我可以接收有关 HTTP 层上特定侦听器的信息
netsh http show servicestate view=requestq verbose=no
Run Code Online (Sandbox Code Playgroud)
:
Snapshot of HTTP service state (Request Queue View):
-----------------------------------------------------
Request queue name: Other Application Pool
Version: 2.0
State: Active
Request queue 503 verbosity level: Limited
Max requests: 1000
Number of active …Run Code Online (Sandbox Code Playgroud) 我创建了下面的脚本来检查应用程序的端口 2025 并记录连接数。
我需要此脚本作为 Windows 上名为 的服务运行netstat_2025。有谁知道是否有这种可能性?
我不想使用任务计划程序,而是在 Windows 上将脚本作为服务运行。
脚本 SCTT521CTO.ps1
$startTime = (Get-Date).ToString("dd_MM_yyyy")
$LogDate = ((get-date).ToLocalTime()).ToString("yyyy-MM-ddTHH:mm:ss.fff")
$hostname = hostname
$portTServer = 8000
$FileTserver = netstat -ano | findstr "8000"
$LogTserver = $LogDate + " - Quantidade de Conexoes na porta " + $portTServer + ": " + $FileTserver.count + " - Servidor: " + $hostname
$LogTserver | Out-File -Append D:\SCTT521CTO\netstat_$startTime.log
$limit = (Get-Date).AddDays(-5)
$path = "D:\SCTT521CTO\*"
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and …Run Code Online (Sandbox Code Playgroud) 我基本上尝试编写一个类似pstree的命令,除了它应该遵循跨机器的进程.
我的意思是如果我运行这个:
$ ssh $node sleep 1000
Run Code Online (Sandbox Code Playgroud)
那么命令应该显示如下:
ssh $node -- ($node) sleep 1000
Run Code Online (Sandbox Code Playgroud)
如果我跑步:
$ ssh $node ssh $node sleep 1000
ssh $node---($node) ssh $node---($node) sleep 1000
Run Code Online (Sandbox Code Playgroud)
等等 ...
我的问题是:如何将一台机器上的一个ssh会话映射到另一台机器上的生成进程?
本地父子进程不是问题,但是如何确定在另一个节点上触发另一个进程的一个节点上的哪个ssh命令.
linux 2.6.18
只有openSSH的"远程"东西.目前正在运行OpenSSH_4.3p2.
当然,SSH访问所有节点(基于密钥的身份验证),因此可以从所有节点获得ps和netstat.
仅Linux的"黑客"很好,不需要便携,但当然这将是一个额外的好处.
用户将始终保持不变,并且我的命令/脚本正在以该用户身份运行.该用户不是root用户.
不必快,只准确.
自发的解决方案是编写一个pstree克隆,在命令字符串" ssh" 上触发,找出源端口然后转到相关的远程机器并找出sshd由这个特定命令生成的孩子中的哪一个.
但也许有一种更聪明的方式呢?:P
ss工具类似于netstat. ss 使用记录非常糟糕的 NETLINK 库 ( man 7 netlink)。我在网上找不到如何正确使用 NETLINK_INET_DIAG 功能。ss 工具的源代码会有所帮助,但我也找不到。任何建议将不胜感激。
root@ubuntu:~# uname -a
Linux ubuntu 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux
root@ubuntu:~# apt-get source ss
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to find a source package for ss
Run Code Online (Sandbox Code Playgroud) 我创建了一个脚本来输出Get-NetTCPConnection数据,但另外显示Process Name和Username。该脚本确实有效,但我喜欢任何简化或使其更规范的提示。
我想知道是否有更有效的方法将ProcessName和添加Username到输出中,而无需将值预加载到自定义 PSObject ($obj数组)中。我担心自定义e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty UserName)}}表达式过于复杂。
$obj=@()
Foreach($p In (Get-Process -IncludeUserName | where {$_.UserName} | `
select Id, ProcessName, UserName)) {
$properties = @{ 'PID'=$p.Id;
'ProcessName'=$p.ProcessName;
'UserName'=$p.UserName;
}
$psobj = New-Object -TypeName psobject -Property $properties
$obj+=$psobj
}
Get-NetTCPConnection | where {$_.State -eq "Established"} | select `
RemoteAddress, `
RemotePort, `
@{n="PID";e={$_.OwningProcess}}, @{n="ProcessName";e={($obj |? PID -eq $_.OwningProcess | …Run Code Online (Sandbox Code Playgroud) 我买了一个 VPS 并在其上构建了一个 shadowsocks 服务器。它运行良好大约 2 个月,突然无法工作,即我无法使用它来克服 GFW。所以我检查了服务器,重新安装了所有东西,检查了防火墙,但仍然无法解决问题。请帮我解决这个难题!
首先,我可以通过 ssh 连接到服务器。我使用的是 mac,服务器操作系统是 CentOS7。
我试图从 mac ping 服务器,它连接了。
PING vultr (108.61.215.163): 56 data bytes
64 bytes from 108.61.215.163: icmp_seq=0 ttl=50 time=485.473 ms
64 bytes from 108.61.215.163: icmp_seq=1 ttl=50 time=407.054 ms
64 bytes from 108.61.215.163: icmp_seq=2 ttl=50 time=429.089 ms
64 bytes from 108.61.215.163: icmp_seq=3 ttl=50 time=552.046 ms
^C
--- vultr ping statistics ---
5 packets transmitted, 4 packets received, 20.0% packet loss
round-trip min/avg/max/stddev = 407.054/468.416/552.046/56.118 ms
Run Code Online (Sandbox Code Playgroud)
然后我用我在 shadowsocks 中定义的特定端口 telnet 它,但它无法连接。 …
Clickhouse版本:(版本20.3.9.70(官方版本))\n(我知道不再支持此功能,我们有计划升级,但需要时间)
\n设置
\n我们正在运行三个查询节点(仅具有分布式表的节点),我们昨天启动了第三个。所有节点都指向相同的存储节点和表。
\n问题
\n该节点可以通过 TCP 和 HTTP 正常处理请求长达 11 小时。之后,clickhouse服务器开始关闭TCP连接。当这种情况发生时,HTTP 仍然可以正常工作。
\n额外信息/证据
\nsystem.metrics.tcp_connection随着时间的推移,新节点的数量稳步下降。netstat显示大量 ACTIVE_WAIT 连接netstat -ntp | tail -n+3 | awk \'{print $6}\' | sort | uniq -c | sort -n\n 2 LAST_ACK\n 380 CLOSE_WAIT\n 386 ESTABLISHED\n 29279 TIME_WAIT\nRun Code Online (Sandbox Code Playgroud)\n用于比较的普通节点:
\n1199 CLOSE_WAIT\n1292 ESTABLISHED\n186 TIME_WAIT\nRun Code Online (Sandbox Code Playgroud)\n无法打开 clickhouse_client
\nuser@server:~$ clickhouse-client \nClickHouse client version 20.3.9.70 (official build).\nConnecting to localhost:9000 as user …Run Code Online (Sandbox Code Playgroud)