Alguém sabe como fechar um soquete TCP ou UDP para uma única conexão via linha de comando do Windows?
Pesquisando sobre isso, vi algumas pessoas perguntando a mesma coisa. Mas as respostas pareciam uma página manual de comandos netstat ou netsh, com foco em como monitorar as portas. Não quero respostas sobre como monitorá-los (eu já faço isso). Eu quero fechar / matar eles.
EDIT, para esclarecimento: digamos que meu servidor escute a porta TCP 80. Um cliente faz uma conexão e a porta 56789 é alocada para ela. Então, descobri que essa conexão é indesejada (por exemplo, esse usuário está fazendo coisas ruins, pedimos que parassem, mas a conexão não caiu em algum lugar ao longo do caminho). Normalmente, eu adicionaria um firewall para fazer o trabalho, mas isso levaria algum tempo e eu estava em uma situação de emergência. Matar o processo que possui a conexão é realmente uma péssima idéia, porque isso derrubaria o servidor (todos os usuários perderiam a funcionalidade quando apenas desejássemos eliminar seletiva e temporalmente essa conexão).
fonte
Respostas:
Sim, isso é possível. Você não precisa ser o processo atual que possui o soquete para fechá-lo. Considere por um momento que a máquina remota, a placa de rede, o cabo de rede e o sistema operacional podem causar o fechamento do soquete.
Considere também que os softwares VPN do Fiddler e do Desktop podem se inserir na pilha da rede e mostrar todo o seu tráfego ou redirecionar todo o seu tráfego.
Então, tudo o que você realmente precisa é que o Windows forneça uma API que permita isso diretamente ou que alguém tenha escrito um programa que funcione como uma VPN ou Fiddler e que seja uma maneira de fechar os soquetes que passam por ela.
Há pelo menos um programa ( CurrPorts ) que faz exatamente isso e eu o usei hoje com o objetivo de fechar soquetes específicos em um processo iniciado antes do início do CurrPorts. Para fazer isso, você deve executá-lo como administrador, é claro.
Observe que provavelmente não é fácil fazer com que um programa não escute em uma porta (bem, é possível, mas esse recurso é chamado de firewall ...), mas acho que isso não foi solicitado aqui. Acredito que a pergunta é "como fecho seletivamente uma conexão ativa (soquete) à porta em que meu programa está ouvindo?". A redação da pergunta é um pouco complicada porque é fornecido um número de porta para a conexão indesejada do cliente de entrada e foi referido como "porta", mas é bastante claro que era uma referência a esse soquete e não à porta de escuta.
fonte
abrir
cmd
digitar
netstat -a -n -o
find
TCP [the IP address]:[port number] .... #[target_PID]#
(idem para UDP)(Btw,
kill [target_PID]
não funcionou para mim)CTRL + ALT + DELETE e escolha "iniciar gerenciador de tarefas"
Clique na aba "Processos"
Habilite a coluna "PID" acessando: Exibir> Selecionar Colunas> Marque a caixa quanto ao PID
Encontre o PID de interesse e "END PROCESS"
Agora você pode executar o servidor novamente em [endereço IP]: [número da porta] sem problemas
fonte
System
processo que lida com as conexões de rede do Windows.taskkill /pid 6168 /f
6168 é o pidPor exemplo, você deseja liberar a porta 8080 Em seguida, siga estes comandos.
Feito!
fonte
Se você conhece a porta que deseja liberar, pode classificar sua lista netstat procurando a porta especificada como esta:
Então o pid aparecerá no nível que você pode matar com o taskkill.
Além disso, você pode querer examinar esta questão que é especificamente para o host local, mas acho que é relevante:
fonte
Use o TCPView: http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
ou CurrPorts: https://www.nirsoft.net/utils/cports.html
Como alternativa, se você não quiser usar o SOFTWARE EXTERNO (essas ferramentas não requerem instalação a propósito), você pode simplesmente PRIMEIRO executar o comando netstat (de preferência netstat -b) e configurar a Política de Segurança Local para bloquear o IP endereço da máquina do usuário em questão, é o que tenho feito com conexões indesejadas ou até desconhecidas - que permitem que você faça tudo SEM QUALQUER SOFTWARE EXTERNO (tudo vem com o Windows) ...
fonte
Experimente as ferramentas TCPView (GUI) e Tcpvcon (linha de comando) da Sysinternals / Microsoft.
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
fonte
Você não pode fechar soquetes sem desligar o processo que possui esses soquetes. Os soquetes pertencem ao processo que os abriu. Então, para descobrir o ID do processo (PID) do Unix / Linux. Use netstat da seguinte maneira:
Isso imprimirá algo como:
Onde -a imprime todos os soquetes, -n mostra o número da porta, -p mostra o PID, -l mostra apenas o que está ouvindo (isso é opcional, dependendo do que você procura).
A informação real que você deseja é PID. Agora podemos encerrar esse processo fazendo:
Se você estiver encerrando um serviço, é melhor usar:
Matar literalmente mata exatamente esse processo e todos os filhos que possui. O uso do comando service executa o script de desligamento registrado no diretório init.d. Se você usar kill em um serviço, ele poderá não iniciar corretamente, porque você não o desligou corretamente. Depende apenas do serviço.
Infelizmente, o Mac é diferente do Linux / Unix a esse respeito. Você não pode usar o netstat. Leia este tutorial se estiver interessado em Mac:
http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/
E se você estiver no Windows, use o TaskManager para eliminar processos e interface do usuário de serviços para desligar os serviços. Você pode usar o netstat no Windows, assim como o Linux / Unix, para identificar o PID.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true
fonte
Use CurrPorts (gratuito e sem instalação): http://www.nirsoft.net/utils/cports.html
/close <Local Address> <Local Port> <Remote Address> <Remote Port> {Process Name}
Exemplos:
Ele também possui uma interface gráfica agradável com recursos de pesquisa e filtro.
Nota: Esta resposta é huntharo e a resposta e o comentário de JasonXA juntos e simplificados para facilitar para os leitores. Exemplos vêm da página da CurrPorts.
fonte
Você não pode fechar soquetes no servidor sem possuir esses soquetes; portanto, não é possível fechar o soquete sem ter o código em execução no processo que possui o soquete do servidor.
No entanto, há outra opção que diz ao cliente para fechar seu soquete. Enviar um pacote RST TCP para a porta na qual o cliente está conectado fará com que o cliente interrompa sua conexão. Você pode fazer isso com a digitalização RST usando o nmap.
http://nmap.org/
fonte
Eu encontrei a resposta certa para este. Experimente o TCPView da Sysinternals, agora de propriedade da Microsoft. Você pode encontrá-lo em http://technet.microsoft.com/en-us/sysinternals/bb897437
fonte
O wkillcx é uma ferramenta de linha de comando do Windows confiável para eliminar as conexões TCP da linha de comando que não foi mencionada. Às vezes, porém, há problemas com servidores com grande número de conexões. Às vezes eu uso o tcpview para mortes interativas, mas o wkillcx pode ser usado em scripts.
fonte
Para fechar a porta, você pode identificar o processo que está escutando nessa porta e interromper esse processo.
fonte
você pode usar programas como o tcpview do sysinternal. Eu acho que isso pode ajudar muito no monitoramento e na conexão indesejada.
fonte
CurrPorts não funcionou para nós e só pudemos acessar o servidor através do ssh, portanto, também não houve TCPView. Também não conseguimos matar o processo, para não deixar cair outras conexões. O que acabamos fazendo e ainda não foi sugerido foi bloquear a conexão no Firewall do Windows. Sim, isso bloqueará todas as conexões que se encaixam na regra, mas, no nosso caso, havia uma única conexão (aquela em que estávamos interessados):
Substitua o IP pelo que você precisa e adicione outras regras, se necessário.
fonte
resposta instantânea / viável / parcial : https://stackoverflow.com/a/20130959/2584794
ao contrário da resposta anterior onde netstat -a -o -n foi usado lista incrivelmente longa era para ser examinada sem o nome do aplicativo usando aqueles portos
fonte
Sim, é possível fechar a porta TCP ou UDP, existe um comando no DOS
Espero que isso funcione para você
fonte
Se você estiver executando no Windows 8, `Windows Server 2012 ou superior, com o PowerShell v4 acima instalado, poderá usar o script abaixo. Isso localiza os processos associados à porta e os encerra.
Código
Documentação:
NetStat
equivalente do PowerShellTaskKill
equivalente do PowerShellfonte