Troppe connessioni CLOSE_WAIT significa che c’è qualcosa di sbagliato nel codice del SW Client.
Questo script in Perl fa una cosa interessante: invia il comando ACK alle connessioni che stanno aspettando.
Naturalmente, usare questo script (programma) in perl con cautela adattandolo alle vostre esigenze. Testatelo prima in un ambiente di laboratorio per capirne le funzionalità.
#!/usr/bin/perl
# Servono le librerie
# libnet-rawip-perl
# libnet-pcap-perl
# libnetpacket-perl
# ------------------
# by Pietro Cornelio
# ------------------
# Questo script invia il comando ACK alla connessioni che stanno aspettando.
use strict;
use Socket;
use Net::RawIP;
use Net::Pcap;
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP qw(:strip);
use NetPacket::TCP;
use POSIX qw(setsid);
use warnings;
open(my $CONNECTIONS_WAIT, "netstat -tulnap | grep CLOSE_WAIT | awk '{print \$4,\$5}' | sed 's/:/ /g' |") || die "Failed: $!\n";
while ( my $conn = <$CONNECTIONS_WAIT> )
{
chomp $conn;
my ($src_ip, $src_port, $dst_ip, $dst_port) = split(' ', $conn);
my $packet = Net::RawIP->new({ip => { frag_off => 0, tos => 0, saddr => $dst_ip, daddr => $src_ip},
tcp => {dest => $src_port, source => $dst_port, seq => 10, ack => 1}});
$packet->send;
}