Windows에서 어떤 프로세스가 포트를 바인드했는지 판별 (리스닝없이)


12

어떤 프로세스가 어떤 소켓에서 수신 대기 중인지 알아 보려면 netstat / TCPview를 사용하면 즉시 볼 수 있습니다. 그러나 수신하지 않고 주소에 바인딩 할 수 있습니다. 이 작업이 완료되면 netstat / TCPview에 나타나지 않지만 소켓을 차단합니다.

파이썬 예제 :

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))

포트가 이제 바인드되어 첫 번째 인스턴스가 여전히 실행중인 동안 두 번째 인스턴스에서 동일한 코드를 실행하려고하면 오류가 발생합니다. 그러나 실제로 사용하여 해당 포트에서 청취를 시작하지 않는 한

s.listen(1)

포트가 netstat / TCPview에 표시되지 않습니다.

문제는 다음과 같습니다. 어떤 포트가 바인딩되어 있는지 (듣지 않는지) 어떤 프로세스가 바인딩되어 있는지 확인할 수 있습니까?

이것의 배경은 내가 있다는 것입니다 했다 바인딩 할 수 없습니다 1976 포트의 이동 범위를 , 나는이 원인이 무엇인지 알고 싶어요. 그 동안 인터넷 연결 공유가 해당 포트를 차단하고 있다는 시행 착오를 통해이 질문에 대한 답변이 궁금합니다.

편집 : 인기있는 요청으로 인해 해당 포트를 찾는 데 사용한 코드는 다음과 같습니다.

import time
import socket

for i in range(0,65536):
    try:
        print "Listening on port", i, '...', 
        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serversocket.bind(('0.0.0.0', i))
        serversocket.listen(5)
        #time.sleep(0.1)
        serversocket.close()
        print "ok"
    except:
        print "FAIL"

(출력을 grep으로 파이프하고 FAIL 전용으로 필터링 할 수 있습니다)


이 스크립트를 0에서 65535까지 반복하고 실패한 포트를 기록한 다음 결과를 netstat 포트와 비교할 수 있습니다. netstat에없는 것은 당신이 찾고있는 것이어야합니다. 수신 대기하지 않는 한 해당 포트 뒤에 어떤 프로세스가 있는지 보여주는 도구 또는 기술을 모르겠습니다.
Kedar

@Kedar : 정확히 어떤 포트가 영향을 받는지 알아 내려고했습니다.
Jan Schejbal

@Lizz : 코드가 게시되었습니다.
Jan Schejbal

답변으로 게시 할 수 있습니까? :)
Lizz

@ 리즈 : 그것은 질문에 대한 답변이 아닙니다. 어떤 포트가 영향을 받았지만 점유중인 포트는 표시하지 않습니다.
Jan Schejbal 2016 년

답변:


1

당신은 사용해야합니다

DWORD GetExtendedTcpTable (PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved);

TableClass 값 = TCP_TABLE_OWNER_PID_ALL "또는"TCP_TABLE_OWNER_PID_CONNECTIONS "또는"TCP_TABLE_OWNER_PID_LISTENER

pTcpTable 구조-> MIB_TCPTABLE_OWNER_PID

검색하려는 정보에 따라

편집하다:

TCP_TABLE_OWNER_PID_ALL은 각각 MIB_TCPROW_OWNER_PID 구조의 배열입니다 MIB_TCPTABLE_OWNER_PID 구조를 반환 dwState해야한다 MIB_TCP_STATE_CLOSED, 듣기 바인딩이 아닌 경우를이 구조도 제공 dwLocalAddr하고dwLocalPort

typedef struct _MIB_TCPROW_OWNER_PID {
  DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
  DWORD dwOwningPid;
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;

여기에는 바운드 및 리스닝 된 소켓 만 나열되어 있지만, 바운드되어 있지만 리스닝되지 않는 소켓에 대한 질문이있었습니다.
Luke Dunstan

당신은 주장하거나 묻는가 ??? 편집 참조
Pat

pastebin.com/vaHMVRQR을 실행하면 리스닝 (Win7)없이 바인드 할 수있는 테이블이 없습니다.
Luke Dunstan

관련 구조에는 특정 정렬이 있으므로 재정의해서는 안됩니다. MS가 정의한 것을 참조해야합니다. 또한 처음에 MS API를 테스트하려는 경우 Python이 올바른 도구가 아닙니다. 대신 C / C ++를 사용해야합니다.
Pat

표시된 코드는 바인드되었지만 연결되지 않은 소켓에 대한 정보를 제공하지 않습니다. NETSTAT의 최신 버전에서 명령 줄 매개 변수 -q 지금이 있음을 나타냅니다 해당 소켓
zentrunix

0

netstat의 최신 버전에는 이제 해당 소켓을 표시하는 명령 행 매개 변수 -q가 있습니다.

$ netstat -?

Displays protocol statistics and current TCP/IP network connections.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]

  -a            Displays all connections and listening ports.
  -b            Displays the executable involved in creating...
  ...
  -p proto      Shows connections for the protocol specified...
  -q            Displays all connections, listening ports, and bound
                nonlistening TCP ports. Bound nonlistening ports may or may not
                be associated with an active connection.
  -r            Displays the routing table.
  ...

사용 예 :

$ netstat -nq -p tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:7              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:9              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:13             0.0.0.0:0              LISTENING
  ...

 TCP    192.168.122.157:50059  54.213.66.195:443      ESTABLISHED
  TCP    0.0.0.0:49676          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49700          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49704          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49705          0.0.0.0:0              BOUND
  ...

해당 상황에서 소켓을 얻는 데 필요한 공용 API가없는 것 같습니다. StackOverflow에서질문을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.