πŸ’» Programming/Computer General

μœˆλ„μš°μ—μ„œ νŠΉμ • 포트λ₯Ό μ‚¬μš©μ€‘μΈ ν”„λ‘œμ„ΈμŠ€ μ€‘μ§€ν•˜κΈ°

μΌ€μ΄μΉ˜ 2017. 11. 14. 09:15

μ•ˆλ…•ν•˜μ„Έμš” μΌ€μ΄μΉ˜μž…λ‹ˆλ‹€.


μ˜€λŠ˜μ€ μœˆλ„μš°μ—μ„œ νŠΉμ • 포트λ₯Ό μ‚¬μš©μ€‘μΈ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ£½μ΄λŠ” 법을 가지고 μ™”μŠ΅λ‹ˆλ‹€. 


μ΅œκ·Όμ— Node.js 앱을 ν…ŒμŠ€νŠΈν•΄λ³Ό 일이 μžˆμ—ˆλŠ”λ° κ³ μ •μ μœΌλ‘œ νŠΉμ • 포트λ₯Ό μ‚¬μš©ν•˜λŠ” μ•±μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μœˆλ„μš°μ—μ„œ cmd 창을 λ„μ›Œμ„œ μ‹€ν–‰μ‹œμΌ°λ‹€κ°€ Ctrl + C둜  ν”„λ‘œκ·Έλž¨μ„ μ€‘μ§€μ‹œμΌ°λŠ”λ° λ‹€μ‹œ κΈ°λ™μ‹œμΌ°λ”λ‹ˆ ν¬νŠΈκ°€ 이미 μ‚¬μš©μ€‘μ΄λΌλ©΄μ„œ μ—λŸ¬κ°€ λ‚˜λ”λΌκ΅¬μš”. κ·Έλž˜μ„œ μ΄λ†ˆμ„ μ–΄λ–»κ²Œ μ£½μ—¬μ•Ό ν•˜λ‚˜ μ°Ύμ•„λ΄€μŠ΅λ‹ˆλ‹€.


μš°μ„  제 ν™˜κ²½μ€ Windows 10μ΄κ΅¬μš” CMD창을 λ„μš°λ©΄ μ•„λž˜μ²˜λŸΌ λ‚˜μ˜΅λ‹ˆλ‹€.


μ œκ°€ 봀던 μ—λŸ¬ λ©”μ‹œμ§€λŠ” μ•„λž˜μ™€ κ°™κ΅¬μš”


Error: listen EADDRINUSE :::2002


2002번 ν¬νŠΈκ°€ 이미 μ‚¬μš©μ€‘μ΄λΌλŠ” λ©”μ‹œμ§€μž…λ‹ˆλ‹€.


그럼 λˆ„κ°€ 이 포트λ₯Ό μ‚¬μš©μ€‘μΈμ§€ 찾아보죠.


cmd 창에 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.


C:\Users\dev>netstat -ano|find "2002"

  TCP    0.0.0.0:2002         0.0.0.0:0           LISTENING       5096

  TCP    [::]:2002              [::]:0                 LISTENING       5096


좜λ ₯된 λ‚΄μš©μ€ TCP ν”„λ‘œν† μ½œμ—μ„œ 2002번 포트둜 λ¦¬μŠ€λ‹ν•˜κ³ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ IDκ°€ 5096λ²ˆμ΄λΌλŠ” κ±Έ λ§ν•΄μ€λ‹ˆλ‹€. μš°λ¦¬λŠ” 5096 ν”„λ‘œμ„ΈμŠ€λ₯Ό 죽이면 λ˜λŠ”κ±°κ² μ£ . 죽이기 전에 μœ„ λͺ…령어에 λŒ€ν•΄μ„œ μ„€λͺ…을 μ’€ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.


netstat -anoλŠ” netstat λͺ…λ Ήμ–΄λ₯Ό a, n, o μ˜΅μ…˜μœΌλ‘œ μ‹€ν–‰μ‹œν‚€λΌλŠ” 의미죠. μ—¬κΈ°μ„œ a, n, o에 λŒ€ν•œ μ„€λͺ…은 netstat /? λ₯Ό μž…λ ₯ν•˜λ©΄ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


C:\Users\dev>netstat /?


ν”„λ‘œν† μ½œ 톡계와 ν˜„μž¬ TCP/IP λ„€νŠΈμ›Œν¬ 연결을 ν‘œμ‹œν•©λ‹ˆλ‹€.


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


  -a            λͺ¨λ“  μ—°κ²°κ³Ό μˆ˜μ‹  λŒ€κΈ° 포트λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

  -b            각 μ—°κ²° λ˜λŠ” μˆ˜μ‹  λŒ€κΈ° 포트 생성과 κ΄€λ ¨λœ μ‹€ν–‰ νŒŒμΌμ„

                ν‘œμ‹œν•©λ‹ˆλ‹€. 잘 μ•Œλ €μ§„ μ‹€ν–‰ 파일이 μ—¬λŸ¬ 독립 ꡬ성 μš”μ†Œλ₯Ό

                ν˜ΈμŠ€νŒ…ν•  경우 μ—°κ²° λ˜λŠ” μˆ˜μ‹  λŒ€κΈ° 포트 생성과 κ΄€λ ¨λœ

                ꡬ성 μš”μ†Œμ˜ μ‹œν€€μŠ€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

                μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” μ‹€ν–‰ 파일 이름이 λŒ€κ΄„ν˜Έλ‘œ μ•„λž˜μ—

                ν‘œμ‹œλ˜κ³  μœ„μ—λŠ” TCP/IP에 도달할 λ•ŒκΉŒμ§€

                호좜된 ꡬ성 μš”μ†Œκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 이 μ˜΅μ…˜μ€ μ‹œκ°„μ΄ 였래

                걸릴 수 있으며 μ‚¬μš© κΆŒν•œμ΄ μ—†μœΌλ©΄ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

  -e            이더넷 톡계λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 이 μ˜΅μ…˜μ€ -s μ˜΅μ…˜κ³Ό ν•¨κ»˜

                μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  -f            μ™ΈλΆ€ μ£Όμ†Œμ˜ FQDN(μ •κ·œν™”λœ 도메인 이름)을

                ν‘œμ‹œν•©λ‹ˆλ‹€.

  -n            μ£Όμ†Œμ™€ 포트 번호λ₯Ό 숫자 ν˜•μ‹μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

  -o            각 μ—°κ²°μ˜ μ†Œμœ μž ν”„λ‘œμ„ΈμŠ€ IDλ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

  -p proto      proto둜 μ§€μ •ν•œ ν”„λ‘œν† μ½œμ˜ 연결을 ν‘œμ‹œν•©λ‹ˆλ‹€. protoλŠ”

                TCP, UDP, TCPv6 λ˜λŠ” UDPv6 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. -s μ˜΅μ…˜κ³Ό ν•¨κ»˜

                μ‚¬μš©ν•˜μ—¬ ν”„λ‘œν† μ½œλ³„ 톡계λ₯Ό ν‘œμ‹œν•  경우 protoλŠ” IP, IPv6, ICMP,

                ICMPv6, TCP, TCPv6, UDP λ˜λŠ” UDPv6 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

  -q            λͺ¨λ“  μ—°κ²°, μˆ˜μ‹  λŒ€κΈ° 포트 및 λ°”μΈλ”©λœ λΉ„μˆ˜μ‹  λŒ€κΈ° TCP

                포트λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. λ°”μΈλ”©λœ λΉ„μˆ˜μ‹  λŒ€κΈ° ν¬νŠΈλŠ” ν™œμ„± μ—°κ²°κ³Ό μ—°κ²°λ˜κ±°λ‚˜

                μ—°κ²°λ˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  -r            λΌμš°νŒ… ν…Œμ΄λΈ”μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

  -s            ν”„λ‘œν† μ½œλ³„ 톡계λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 기본적으둜 IP, IPv6, ICMP,

                ICMPv6, TCP, TCPv6, UDP 및 UDPv6에 λŒ€ν•œ 톡계λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

                -p μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έκ°’μ˜ 일뢀 집합에 λŒ€ν•œ ν†΅κ³„λ§Œ

                지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

  -t            ν˜„μž¬ μ—°κ²° μ˜€ν”„λ‘œλ“œ μƒνƒœλ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

  -x            NetworkDirect μ—°κ²°, μˆ˜μ‹ κΈ° 및 곡유 끝점을

                ν‘œμ‹œν•©λ‹ˆλ‹€.

  -y            λͺ¨λ“  연결에 λŒ€ν•œ TCP μ—°κ²° ν…œν”Œλ¦Ώμ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

                λ‹€λ₯Έ μ˜΅μ…˜κ³Ό ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

  interval      λ‹€μŒ ν™”λ©΄μœΌλ‘œ μ΄λ™ν•˜κΈ° 전에 μ§€μ •ν•œ μ‹œκ°„(초) λ™μ•ˆ μ„ νƒν•œ 톡계λ₯Ό λ‹€μ‹œ ν‘œμ‹œν•©λ‹ˆλ‹€.

                톡계 λ‹€μ‹œ ν‘œμ‹œλ₯Ό μ€‘μ§€ν•˜λ €λ©΄ <Ctrl+C>λ₯Ό λˆ„λ₯΄μ‹­μ‹œμ˜€.

                이 값을 μƒλž΅ν•˜λ©΄ ν˜„μž¬ ꡬ성 정보가

                ν•œ 번만 좜λ ₯λ©λ‹ˆλ‹€.


μ΄λ ‡κ²Œ μ‹€ν–‰λœ κ²°κ³Όλ₯Ό νŒŒμ΄ν”„( | )λ₯Ό 톡해 find λͺ…λ Ήμ–΄λ‘œ μ „λ‹¬ν•˜μ—¬ "2002"λ₯Ό 찾으라고 ν•˜κ³ μžˆμ£ . find λͺ…λ Ήμ–΄λŠ” λ¦¬λˆ…μŠ€μ˜ grepκ³Ό λΉ„μŠ·ν•œ κΈ°λŠ₯을 ν•©λ‹ˆλ‹€.


find "2002"λ₯Ό μ œμ™Έν•œ μ•ž λΆ€λΆ„λ§Œ μ‹€ν–‰μ‹œν‚€λ©΄ 2002포트 말고도  λ‹€λ₯Έ μ—¬λŸ¬ ν¬νŠΈλ“€μ— λŒ€ν•œ λͺ©λ‘μ΄ ν•¨κ»˜ 좜λ ₯λ©λ‹ˆλ‹€. 


자, 그럼 5096번 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ£½μ—¬λ³ΌκΉŒμš”?


μœˆλ„μš°μ—μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό 죽일 λ•ŒλŠ” "μž‘μ—…κ΄€λ¦¬μž"λ₯Ό μ΄μš©ν•˜λŠ” 방법도 μžˆμ§€λ§Œ κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ κ°„ν˜Ή μž‘μ—…κ΄€λ¦¬μžμ—μ„œ μ°ΎκΈ° νž˜λ“  녀석듀이 있죠. 그럴 경우 cmdμ°½μ—μ„œ μž‘μ—…μ„ ν•˜λ©΄ 훨씬 μˆ˜μ›”ν•˜κ²Œ μž‘μ—…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


ν”„λ‘œμ„ΈμŠ€λ₯Ό 죽일 λ•ŒλŠ” taskkill λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 그럼 이녀석에 λŒ€ν•œ μ„€λͺ…을 ν•œλ²ˆ λ³ΌκΉŒμš”?


C:\Users\dev>taskkill /?


TASKKILL [/S μ‹œμŠ€ν…œ [/U μ‚¬μš©μž 이름 [/P [μ•”ν˜Έ]]]]

         { [/FI ν•„ν„°] [/PID ν”„λ‘œμ„ΈμŠ€ id | /IM 이미지 이름] } [/T] [/F]


μ„€λͺ…:

    이 λ„κ΅¬λŠ” ν”„λ‘œμ„ΈμŠ€ ID(PID) λ˜λŠ” 이미지 μ΄λ¦„μœΌλ‘œ μž‘μ—…μ„ μ’…λ£Œν•˜λŠ” 데

    μ‚¬μš©ν•©λ‹ˆλ‹€.


맀개 λ³€μˆ˜ λͺ©λ‘:

    /S    μ‹œμŠ€ν…œ           μ—°κ²°ν•  원격 μ‹œμŠ€ν…œμ„ μ§€μ •ν•©λ‹ˆλ‹€.


    /U    [도메인\]μ‚¬μš©μž  λͺ…령을 μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” μ‚¬μš©μž μ»¨ν…μŠ€νŠΈλ₯Ό

                           μ§€μ •ν•©λ‹ˆλ‹€.


    /P    [μ•”ν˜Έ]           ν•΄λ‹Ή μ‚¬μš©μž μ»¨ν…μŠ€νŠΈμ˜ μ•”ν˜Έλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

                           μƒλž΅ν•œ κ²½μš°μ—λŠ” λ¬Όμ–΄λ΄…λ‹ˆλ‹€.


    /FI   ν•„ν„°             μž‘μ—… 집합을 μ„ νƒν•˜λŠ” ν•„ν„°λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

                           "*"λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예: imagename eq acme*


    /PID  ν”„λ‘œμ„ΈμŠ€_ID      μ’…λ£Œν•  ν”„λ‘œμ„ΈμŠ€μ˜ PIDλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

                           TaskListλ₯Ό μ‚¬μš©ν•˜μ—¬ PIDλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.


    /IM   μ΄λ―Έμ§€ 이름      μ’…λ£Œν•  ν”„λ‘œμ„ΈμŠ€μ˜ 이미지 이름을

                           μ§€μ •ν•©λ‹ˆλ‹€. μ™€μΌλ“œμΉ΄λ“œ 문자 '*'λ₯Ό μ‚¬μš©ν•˜μ—¬

                           λͺ¨λ“  μž‘μ—… λ˜λŠ” 이미지 이름을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.


    /T                     μ§€μ •λœ ν”„λ‘œμ„ΈμŠ€μ™€ κ·Έ ν”„λ‘œμ„ΈμŠ€λ‘œλΆ€ν„° μ‹œμž‘λœ

                           λͺ¨λ“  μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•©λ‹ˆλ‹€.


    /F                     ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œλ‘œ μ’…λ£Œν•˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.


    /?                     μ΄ 도움말 λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.


ν•„ν„°:

    ν•„ν„° 이름     μœ νš¨ν•œ μ—°μ‚°μž             μœ νš¨ν•œ κ°’

    -----------   ---------------           -------------------------

    STATUS        eq, ne                    RUNNING |

                                            NOT RESPONDING | UNKNOWN

    IMAGENAME     eq, ne                    이미지 이름

    PID           eq, ne, gt, lt, ge, le    PID κ°’

    SESSION       eq, ne, gt, lt, ge, le    μ„Έμ…˜ 번호.

    CPUTIME       eq, ne, gt, lt, ge, le    CPU μ‹œκ°„ ν˜•μ‹

                                            hh:mm:ss

                                            hh - μ‹œκ°„,

                                            mm - λΆ„, ss - 초

    MEMUSAGE      eq, ne, gt, lt, ge, le    λ©”λͺ¨λ¦¬ μ‚¬μš©(KB)

    USERNAME      eq, ne                    μ‚¬μš©μž 이름([domain\]user

                                            ν˜•μ‹)

    MODULES       eq, ne                    DLL 이름

    SERVICES      eq, ne                    μ„œλΉ„μŠ€ 이름

    WINDOWTITLE   eq, ne                    μ°½ 제λͺ©


    μ°Έκ³ 

    ----

    1) /IM μŠ€μœ„μΉ˜μ— λŒ€ν•œ μ™€μΌλ“œμΉ΄λ“œ 문자 '*'λŠ” ν•„ν„°κ°€ 적용될 λ•Œλ§Œ

    μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    2) 원격 ν”„λ‘œμ„ΈμŠ€λŠ” 항상 κ°•μ œμ μœΌλ‘œ(/F) μ’…λ£Œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

    3) 원격 컴퓨터가 μ§€μ •λ˜λ©΄ "WINDOWTITLE"  및 "STATUS" ν•„ν„°λŠ”

       μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


예:

    TASKKILL /IM notepad.exe

    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

    TASKKILL /F /IM cmd.exe /T

    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe

    TASKKILL /S μ‹œμŠ€ν…œ /U domain\username /FI "USERNAME ne NT*" /IM *

    TASKKILL /S μ‹œμŠ€ν…œ /U μ‚¬μš©μž 이름 /P μ•”ν˜Έ /FI "IMAGENAME eq note*"


μ„€λͺ…을 μ½μ–΄λ³΄λ‹ˆ μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ λ‚΄μš©μ΄ λ„ˆλ¬΄λ‚˜λ„ 잘 μ„€λͺ…λ˜μ–΄μžˆλ„€μš”.


그럼 이제 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ£½μ—¬λ³΄κ² μŠ΅λ‹ˆλ‹€.


C:\Users\dev>netstat -ano|find "2002"

  TCP    0.0.0.0:2002           0.0.0.0:0              LISTENING       5096

  TCP    [::]:2002              [::]:0                 LISTENING       5096


C:\Users\dev>taskkill /pid 5096

였λ₯˜: ν”„λ‘œμ„ΈμŠ€(PID 5096)λ₯Ό μ’…λ£Œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

원인: 이 ν”„λ‘œμ„ΈμŠ€λŠ” /F μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ κ°•μ œλ‘œ μ’…λ£Œν•΄μ•Ό ν•©λ‹ˆλ‹€.


C:\Users\dev>taskkill /pid 5096 /f /t

성곡: PID 5096인 ν”„λ‘œμ„ΈμŠ€(PID 11172인 μžμ‹ ν”„λ‘œμ„ΈμŠ€)κ°€ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.


λ³΄μ‹œλ©΄ 쀑간에 였λ₯˜κ°€ ν•œλ²ˆ λ‚˜λ©΄μ„œ /Fμ˜΅μ…˜μ„ 쓰라고 λ‚˜μ˜€λ„€μš”. 참고에 원격 ν”„λ‘œμ„ΈμŠ€λŠ” /F μ˜΅μ…˜μ„ μ€˜μ•Ό μ’…λ£Œλœλ‹€κ³  λ‚˜μ™€μžˆλŠ”λ° κ·Έκ±° λ•Œλ¬ΈμΈκ²ƒ κ°™μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ Fμ˜΅μ…˜μ„ μΆ”κ°€ν•˜κ³  ν˜Ήμ‹œλ‚˜ ν•΄μ„œ μžμ‹ν”„λ‘œμ„ΈμŠ€κΉŒμ§€ μ£½μ΄λŠ” Tμ˜΅μ…˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. μ•„!! 그리고  μ˜΅μ…˜μ€ λŒ€μ†Œλ¬Έμž ꡬ문을 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœˆλ„μš°λŠ” μ˜μ–΄ λŒ€μ†Œλ¬Έμž ꡬ뢄을 ν•˜μ§€ μ•Šμ£ . 


μ΄μƒμž…λ‹ˆλ‹€. μ˜€λŠ˜μ€ μ—¬κΈ°κΉŒμ§€ μ“Έκ²Œμš”. μ˜€λŠ˜λ„ μ¦μ½”ν•˜μ„Έμš”~