A desativação das interfaces de rede não faz com que as conexões TCP terminem em geral. É assim que o TCP / IP é projetado. A idéia é que os links desativados não façam com que as camadas superiores desistam das conexões, pois o problema pode ser transitório e desaparecer rapidamente, ou os protocolos de roteamento podem instalar rapidamente rotas alternativas e curar a rede dessa maneira. Pense em desconectar seu cabo ethernet por alguns segundos e conectá-lo novamente: sessões TCP que estão transmitindo dados ativamente através dele perderão alguns pacotes, incorrerão em alguns timeouts curtos e se recuperarão rapidamente (talvez após engatar o início lento) assim que o cabo é restaurado. Para mudar isso, o TCP ficaria muito frágil, já que cada pequeno soluço na rede se torna fatal para as sessões TCP impactadas.
Dito isto, você ainda quer terminar manualmente conexões TCP ativas a partir de um script de shell. Eu tenho medo que não exista uma interface óbvia no Linux para encontrar conexões TCP e forçá-las a encerrar.
Uma maneira de pensar é a origem de pacotes RST
falsos (por exemplo, através de uma interface tun / tap) para enganar o kernel e pensar que a outra extremidade terminou a conexão. Isso é um grande esforço porque você precisa configurar a interface tun / tap (ou outro método de injeção de pacotes no kernel), encontrar o endereço IP remoto, o número da porta e o número de seqüência TCP corretos para o spoof e construir manualmente Cabeçalhos IP e TCP!
Um pouco de googling revela este método usando tcpkill
. Talvez isso funcione para você.