यह ध्यान रखें कि यह सीमा अद्वितीय (स्रोत आईपी, पीयर आईपी, पीयर पोर्ट) टपल के अनुसार लागू होती है। इसलिए आपको इनमें से प्रत्येक tuples द्वारा netstat
/ के आउटपुट को समूहित करना होगा ss
, और यह जांचना होगा कि प्रत्येक समूह कनेक्शन सीमा के कितना करीब है।
यह पोस्ट बताती है कि आप इस समूह को और अधिक विस्तार से कैसे कर सकते हैं। यह जाँचने के लिए कि प्रत्येक समूह रूबी में सीमा के कितना करीब है, आप ss
आउटपुट को संसाधित कर सकते हैं जैसे:
#!/usr/bin/ruby
first_port, last_port = IO.read('/proc/sys/net/ipv4/ip_local_port_range').split.map(&:to_i)
ephemeral_port_max = last_port - first_port + 1
ephemeral_port_warning = ephemeral_port_max / 3 * 2
conns = `ss --numeric --tcp state connected "( sport >= :#{first_port} and sport <= :#{last_port} )"`
groups = Hash.new(0)
conns.lines.each do |conn|
state, recvq, sendq, local, peer = conn.split
local_ip, local_port = local.split(':')
group = [local_ip, peer]
groups[group] += 1
end
groups_requiring_warning =
groups.select { |k, v| v > ephemeral_port_warning }
.to_a
.sort_by { |v1, v2| v1[1] <=> v2[1] } # Sort groups in descending order of number of connections
groups_requiring_warning.each do |group, used_port_count|
puts "Connections from #{group[0]} to #{group[1]} "\
"have used #{used_port_count} ephemeral ports out of #{ephemeral_port_max} max"\
"(#{((used_port_count.to_f / ephemeral_port_max) * 100).round(2)}% used)"
end