윈도우 port 사용중인지 알아보는 방법

이번 포스팅에서는 윈도우에서 현재 실행중인 프로그램들의 사용 포트 그리고 특정 포트는 어느 프로그램이 사용하고 있는지 확인하는 명령어에 대해 알아보는 시간을 갖도록 하겠습니다. (갑자기 무슨 강의 같은 말투를!!! ㅎㅎㅎ)

본 게시물을 작성하게 된 이유는

전에 피들러(Fiddler) 포트 충돌 문제 해결에 대한 포스팅(//ooz.co.kr/143) 을 작성하였었는데,

해당 포스팅을 참조해 보시면 피들러 프로그램을 실행시켰는데, Unable to bind to port [8888]. ErrorCode: 10013 에러가 뜨면서 다른 프로그램이 이미 해당 포트를 점유하고 있다고 하면서 프로그램이 실행되지 않았습니다.

당시에는 피들러 프로그램의 포트를 다른 포트를 사용하도록 변경하여 문제를 해결하기는 하였는데, 도대체 어떤 프로그램이 8888포트를 사용하는 것일까 궁금해질 수도 있습니다.

그럼 윈도우에서 현재 사용되고 있는 포트를 확인해보는 방법에 대해 알아 보겠습니다.

Windows 7 OS 환경을 기반으로 작성하였습니다.

1) [시작-실행]에서 cmd.exe 를 실행시켜 명령프롬프트 창을 띄웁니다.

2) 명령어 netstat 을 입력한 후, 엔터키를 누릅니다.

활성연결 이란 제목과 프로토콜, 로컬 주소, 외부주소, 상태 등등에 대해 여러 정보가 표시됩니다.

일단 무슨 내용인지는 차 후, 알아보기로 하고, 다시

3) 명령어 netstat help 를 입력한 후, 엔터키를 누릅니다. (netstat /? 로 입력해도 동일합니다.)

 netstat 을 사용하기 위한 다양한 옵션에 대한 정보가 나옵니다.

이제 여러 옵션을 조합하여 우리가 원하는 정보를 찾아보겠습니다.

3) 옵션 중에 다음 옵션을 주어 실행합니다.

 * C:\> netstat -an | findstr 8888

 -a : 모든 연겨로가 수신 대기 포트를 표시합니다.

 -n : 주소와 포트 번호를 숫자 형식으로 표시합니다.

 | findstr 8888 : 결과값에 8888 텍스트를 포함한 결과만 출력합니다.

검색을 해도 결과가 없는 것을 보니, 현재 8888 포트를 사용하고 있는 프로그램이 없는 것으로 보입니다.

4) 그럼 이제 8888 포트를 사용하는 피들러를 실행시키고, 피들러로 패킷 캡쳐를 몇번 해본 후, 동일한 명령어를 다시 실행시켜 봅니다. 

(피들러 프로그램은 netstat의 예를 들기 위해 사용한 것이며, 다른 포트를 사용하는 다른 프로그램으로 해보셔도 무방합니다.)

실제 해당 포트를 통해서 무언가 데이터 통신이 있었음을 확인할 수 있습니다.

(피들러는 8888포트를 사용하는게 맞습니다. 맞나요? 우리는 8888포트를 통해서 통신이 있었음을 확인했지만, 실제 피들러 프로그램을 통해서 통신이 된것인지 확인하지 못하였습니다. 추측만 했을 뿐입니다.)

5) netstat 검색 옵션에 -o를 추가 다시 실행합니다.

 -o : 각 연결의 소유자 프로세스 ID를 표시합니다. (프로세스 ID를 알게 되면 프로그램(서비스)도 알 수 있습니다.)

이제 가장 오른쪽에 8888포트를 통해 통신한 프로그램의 프로세스ID를 확인할 수 있습니다.

6) 그럼 마지막으로 프로세스ID를 통해 해당 포트에 연결된 프로그램이 무엇인지 확인하여 보겠습니다.

 다음 명령어를 입력합니다. 아래 맨 뒤의 숫자는 5)단계에서 찾은 프로세스ID 입니다. 

tasklist /FI "PID eq 17088"

 tasklist 의 옵션을 더 자세하게 보기 원한다면

C:\> tasklist /?

를 입력하면됩니다.

 /FI 옵션은 필터 기능으로 뒤의 연이어 오는 필터에서 지정한 조건과 일치하는 작업 집합을 표시하도록 하는 옵션입니다.

"PID eq 17088"은 프로세스ID가  17088과 같은 프로그램(작업, task)를 의미합니다.

즉 위의 명령어는 '프로세스ID가 17088인 프로그램(작업)의 목록을 출력하라' 보시면 되겠습니다.

검색 결과가 나왔습니다. 프로세스ID가 17088인 프로그램(작업)은 Fiddler.exe (피들러) 였습니다.!!!

윈도우에서 사용중인 특정 포트와 프로그램을 확인하기 위해 netstat 과 tasklist 명령어를 사용하였습니다.

간단히 포트 및 프로그램 확인을 위한 것이라 해당 명령어들에 대해 자세하게 작성한 포스팅은 아니므로, 직접 /? 명령어를 사용하여 사용법에 대해 확인하시거나 그 외에 궁금한 사항이 있으시면 댓글로 질문 주시면 성실히 답변드리겠습니다.^^

netstat 는 네트워크 관련한 정보를 보는 유틸리티로 오래전부터 Unix 계열의 운영체제에서 사용되어 왔으며 현재 리슨중인 포트, 모든 내외부/연결 정보등을 확인할 수 있습니다.

사용법

사용중인 모든 소켓 보기

-a, --all 옵션을 사용하면 사용중인 모든 포트를 나열합니다.

$ sudo netstat -a Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp6 0 0 [::]:hostmon [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 0.0.0.0:hostmon 0.0.0.0:* udp 0 0 localhost:323 0.0.0.0:* udp 0 0 ip-127-0-0-53.ap:domain 0.0.0.0:* udp 0 0 ip-172-31-23-247:bootpc 0.0.0.0:* udp6 0 0 [::]:hostmon [::]:* udp6 0 0 localhost:323 [::]:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 19709 /run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 21522 /var/lib/sss/pipes/nss

BASH

listening 소켓 

-l, --listening 옵션을 사용하면 listening 중인 모든 TCP/UDP/Unix Domain socket을 표시합니다.

$ sudo netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp6 0 0 [::]:hostmon [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 0.0.0.0:hostmon 0.0.0.0:* udp 0 0 localhost:323 0.0.0.0:* udp 0 0 ip-127-0-0-53.ap:domain 0.0.0.0:* udp 0 0 ip-172-31-23-247:bootpc 0.0.0.0:* udp6 0 0 [::]:hostmon [::]:* udp6 0 0 localhost:323 [::]:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 19709 /run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 21522 /var/lib/sss/pipes/nss unix 2 [ ACC ] SEQPACKET LISTENING 18498 /run/systemd/coredump

BASH

listening TCP 소켓 

-t, –tcp 옵션은 listening 중인 TCP 소켓만 표시합니다.

$ sudo netstat -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 96 ip-172-31-23-247.ap:ssh 1.2.3.4:50186 ESTABLISHED

BASH

listening 소켓 정보 상세 보기

여러 옵션을 조합해서 listening 중인 모든 소켓에 대한 상세 정보를 볼수 있으며 옵션에 대한 설명은 하단을 참고하세요.

$ sudo netstat -antup Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 848/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 980/sshd tcp 0 96 172.31.23.247:22 1.1.1.1:50186 ESTABLISHED 30037/sshd: ec2-use tcp6 0 0 :::5355 :::* LISTEN 848/systemd-resolve tcp6 0 0 :::22 :::* LISTEN 980/sshd udp 0 0 0.0.0.0:5355 0.0.0.0:* 848/systemd-resolve udp 0 0 127.0.0.1:323 0.0.0.0:* 677/chronyd udp 0 0 127.0.0.53:53 0.0.0.0:* 848/systemd-resolve udp 0 0 172.31.23.247:68 0.0.0.0:* 774/NetworkManager udp6 0 0 :::5355 :::* 848/systemd-resolve udp6 0 0 ::1:323 :::* 677/chronyd

BASH

정보 갱신해서 보기

-c, --continuous 옵션을 사용하면 종료되지 않고 계속 정보를 갱신하면서 표시합니다.

routing 정보 보기

-r, --route 옵션으로 현재 시스템의 커널 라우팅 정보를 볼 수 있습니다.

$ sudo netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0 172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0

BASH

주요 옵션

옵션의미

-a

모든 소켓 표시
-t  TCP socket 만 표시
-u UDP socket 만 표시
-n 호스트, 포트 번호 등의 이름 확인을 하지 않고 숫자로 표시
-p 소켓을 사용하고 있는 프로세스의 ID 표시
-r 라우팅 테이블 표시
-l 연결 대기 상태인 소켓만 표시

같이 보기

  • netstat 로 사용중인 포트 확인
  • linux socket 상태를 조회하는 ss(socket statistics) 명령어 사용법

Ref

  • //www.binarytides.com/linux-ss-command/

Ref

  • lsof 사용법
  • lsof
  • 10 examples of Linux ss command to monitor network connections
  • //access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Securing_Network_Access.html#sec-Securing_Services_With_TCP_Wrappers_and_xinetd

Toplist

최신 우편물

태그