মনে রাখবেন যে এই সীমাটি অনন্য (উত্স আইপি, পিয়ার আইপি, পিয়ার পোর্ট) টিপল প্রতি প্রযোজ্য। অতএব আপনাকে এই প্রতিটি টিউপলসের 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