[networking] Windows 명령 행을 통해 TCP 및 UDP 포트를 닫는 방법

누군가 Windows 명령 줄을 통해 단일 연결을 위해 TCP 또는 UDP 소켓을 닫는 방법을 알고 있습니까?

이것에 대해 인터넷 검색을하면서 일부 사람들이 같은 것을 요구하는 것을 보았습니다. 그러나 답변은 포트를 모니터링하는 방법에 초점을 맞춘 netstat 또는 netsh 명령의 수동 페이지처럼 보였습니다. 모니터링 방법에 대한 답변을 원하지 않습니다 (이미 수행함). 닫고 죽이고 싶습니다.

설명을 위해 편집 : 내 서버가 TCP 포트 80을 수신한다고 가정 해 봅시다. 클라이언트가 연결하고 포트 56789가 할당됩니다. 그런 다음이 연결이 바람직하지 않다는 것을 발견했습니다 (예 :이 사용자가 나쁜 일을하고 있습니다. 중지하도록 요청했지만 연결이 끊어지지 않았습니다). 일반적으로 작업을 수행하기 위해 방화벽을 추가하지만 다소 시간이 걸리며 긴급 상황에 처했습니다. 연결을 소유하는 프로세스를 종료하면 서버를 다운시킬 수 있기 때문에 여기에서 실제로 나쁜 생각입니다 (이 연결 하나만 선택적으로 일시적으로 삭제하려고하면 모든 사용자가 기능을 잃게됩니다).



답변

예, 가능합니다. 소켓을 소유하기 위해 소켓을 소유 한 현재 프로세스 일 필요는 없습니다. 원격 시스템, 네트워크 카드, 네트워크 케이블 및 OS가 모두 소켓을 닫을 수있는 순간을 고려하십시오.

Fiddler 및 Desktop VPN 소프트웨어는 네트워크 스택에 자신을 삽입하고 모든 트래픽을 표시하거나 모든 트래픽을 다시 라우팅 할 수 있습니다.

따라서 실제로 필요한 것은 Windows가 직접 API를 제공하거나 누군가 VPN이나 ​​Fiddler처럼 작동하는 프로그램을 작성하여 통과하는 소켓을 닫을 수있는 방법입니다.

정확히 이것을 수행하는 적어도 하나의 프로그램 ( CurrPorts )이 있으며 CurrPorts가 시작되기 전에 시작된 프로세스에서 특정 소켓을 닫기 위해 오늘 사용했습니다. 이를 위해서는 물론 관리자 권한으로 실행해야합니다.

프로그램이 포트에서 수신 대기하지 않게하는 것은 아마도 불가능할 수도 있습니다 (물론 가능하지만 기능은 방화벽이라고합니다 …). 문제는 “프로그램이 수신하는 포트에 대한 하나의 활성 연결 (소켓)을 선택적으로 닫는 방법”이라고 생각합니다. 원치 않는 인바운드 클라이언트 연결에 대한 포트 번호가 제공되고 “포트”라고 불려 지므로 질문의 문구는 약간 벗어났습니다.


답변

  1. 열다 cmd

    • 입력 netstat -a -n -o

    • 찾기 TCP [the IP address]:[port number] .... #[target_PID]#(UDP의 경우에는 구분)

    • (Btw, kill [target_PID]나를 위해 일 하지 않았다)

  2. Ctrl + Alt + Delete를 누르고 “작업 관리자 시작”을 선택하십시오.

    • “프로세스”탭을 클릭하십시오

    • 다음으로 이동하여 “PID”열을 활성화하십시오.보기> 열 선택> PID 확인란 선택

    • 관심있는 PID 및 “END PROCESS”찾기

  3. 이제 문제없이 [IP 주소] : [포트 번호]에서 서버를 다시 실행할 수 있습니다.


답변

예를 들어 포트 8080을 해제하려면 다음 명령을 따르십시오.

 netstat -ano
 taskkill /f /im [PID of the port 8080 got from previous command]

끝난!


답변

해제하려는 포트를 알고 있으면 다음과 같이 특정 포트를 찾아 netstat 목록을 정렬 할 수 있습니다.

netstat -ano | findstr :8080

그러면 pid는 rigth에 나타나서 taskkill으로 죽일 수 있습니다.

여기에 이미지 설명을 입력하십시오

taskkill/pid 11704 /F

또한 localhost에 대한 이 질문 을보고 싶을 수도 있지만 관련이 있다고 생각합니다.


답변

TCPView ( http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx ) 또는 CurrPorts ( http://www.nirsoft.net/utils/cports.html )를 사용하십시오.

또는 EXTERNAL SOFTWARE를 사용하지 않으려는 경우 (이 도구는 설치를 필요로하지 않음) 먼저 netstat 명령 (바람직하게 netstat -b)을 실행 한 다음 로컬 보안 정책을 설정하여 IP를 차단할 수 있습니다 문제가되는 사용자 컴퓨터의 주소, 그것은 원치 않거나 알 수없는 연결로 수행 한 것입니다-외부 소프트웨어없이 모든 것을 할 수 있습니다 (Windows와 함께 제공되는 모든 것) …


답변

sysinternals / microsoft 도구 인 tcpview (gui) 및 Tcpvcon (명령 줄)을 사용해보십시오.


답변

해당 소켓을 소유 한 프로세스를 종료하지 않으면 소켓을 닫을 수 없습니다. 소켓은 열린 프로세스에서 소유합니다. 따라서 유닉스 / 리눅스의 프로세스 ID (PID)를 찾으십시오. 다음과 같이 netstat를 사용하십시오.

netstat -a -n -p -l

다음과 같이 인쇄됩니다.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State     PID/Program name
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN     1879/sendmail: acce
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN     1860/xinetd

-a는 모든 소켓을 인쇄하고, -n은 포트 번호를, -p는 PID를, -l은 수신중인 항목 만 표시합니다 (이후에 따라 선택 사항 임).

실제 정보는 PID입니다. 이제 다음을 수행하여 해당 프로세스를 종료 할 수 있습니다.

kill 1879

서비스를 종료하는 경우 다음을 사용하는 것이 좋습니다.

service sendmail stop

Kill은 문자 그대로 해당 프로세스와 소유 한 모든 자식 만 죽입니다. service 명령을 사용하면 init.d 디렉토리에 등록 된 종료 스크립트가 실행됩니다. 서비스에서 kill을 사용하면 제대로 종료되지 않아 제대로 시작되지 않을 수 있습니다. 그것은 단지 서비스에 달려 있습니다.

불행히도 Mac은 이런 점에서 Linux / Unix와 다릅니다. netstat를 사용할 수 없습니다. Mac에 관심이 있다면이 튜토리얼을 읽으십시오.

http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/

그리고 Windows를 사용하는 경우 TaskManager를 사용하여 프로세스를 종료하고 서비스 UI를 사용하여 서비스를 종료하십시오. Linux / Unix와 마찬가지로 Windows에서 netstat를 사용하여 PID를 식별 할 수 있습니다.

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true