ในอีกบทความหนึ่ง เราได้อธิบายพอร์ตคอมพิวเตอร์และว่ามันใช้ทำอะไร นอกจากนั้น เราสามารถทำอะไรกับข้อมูลพอร์ตได้บ้าง? เนื่องจากトラフィกทั้งหมดเข้าและออกจากคอมพิวเตอร์ผ่านพอร์ต เราสามารถตรวจสอบพวกมันเพื่อดูว่ากำลังทำอะไรอยู่ พอร์ตอาจไม่ได้ฟังトラフィก? หรืออาจมีบางอย่างใช้พอร์ตที่ไม่ควร?
เราจะใช้คำสั่ง Windows netstat เพื่อดูพอร์ตที่กำลังฟังและ PID (Process ID) เรายังจะดูว่าสามารถทำอะไรกับข้อมูลนั้นได้บ้าง
Netstat คืออะไร?
คำสั่ง netstat เป็นการรวมคำว่า 'network' และ 'statistics' คำสั่ง netstat ทำงานในทุกเวอร์ชันของ Windows ตั้งแต่ Windows XP จนถึง Windows 10 มันยังใช้ใน OS อื่นๆ อย่าง Unix และ Linux แต่เราจะมุ่งเน้น Windows ที่นี่
Netstat ให้ข้อมูลดังนี้:
- ชื่อโปรโตคอลที่พอร์ตใช้ (TCP หรือ UDP)
- ที่อยู่ IP ท้องถิ่นและชื่อคอมพิวเตอร์ และหมายเลขพอร์ตที่ใช้
- ที่อยู่ IP และหมายเลขพอร์ตที่เรากำลังเชื่อมต่อ
- สถานะของการเชื่อมต่อ TCP สำหรับรายละเอียดเกี่ยวกับสถานะเหล่านี้ อ่านส่วน Event Processing ของ RFC 793
ใช้ Netstat ดูพอร์ตที่กำลังฟัง & PID
- ใช้คีย์ Win Key + X ในเมนูที่เปิด เลือก Command Prompt
- ป้อนคำสั่ง
netstat -a -n -o
พารามิเตอร์ของ netstat นำหน้าด้วย Hyphen ไม่ใช่ Forward slash เหมือนคำสั่งอื่นๆ -a บอกให้มันแสดงการเชื่อมต่อที่ทำงานอยู่ทั้งหมดและพอร์ตที่คอมพิวเตอร์กำลังฟัง
-n บอก netstat ให้แสดงที่อยู่ IP และพอร์ตเป็นตัวเลขอย่างเดียว เราบอกมันอย่าพยายาม Resolve ชื่อ ทำให้แสดงผลเร็วและสะอาดขึ้น -o บอก netstat ให้รวม PID ด้วย เราจะใช้ PID ต่อไปเพื่อหาว่ากระบวนการไหนใช้พอร์ตเฉพาะ
- ดูผลลัพธ์และจดที่อยู่ หมายเลขพอร์ต สถานะ และ PID สมมติเราอยากรู้ว่าอะไรใช้พอร์ต 63240 จดว่า PID คือ 8552 และกำลังเชื่อมต่อไปที่ IP 172.217.12.138 พอร์ต 443
อะไรกำลังใช้พอร์ตนั้น?
- เปิด Task Manager วิธีง่ายที่สุดคือ กด Ctrl + Shift + Esc
- คลิกแท็บ Details เพื่อให้หาง่ายขึ้น คลิกหัวคอลัมน์ PID ให้เรียง PID ตามตัวเลข
- เลื่อนลงไป PID 8552 และดูว่ามันคือกระบวนการอะไร ในกรณีนี้ คือ googledrivesync.exe แต่มันจริงไหม? บางครั้งไวรัสทำให้ตัวเองดูเหมือนกระบวนการที่ถูกต้อง
- ในเบราว์เซอร์เว็บ ไปที่ ipinfo.io ใส่ที่อยู่ IP 172.217.12.138 ตามที่เราเห็น ที่อยู่ IP ลงทะเบียนไว้กับ Google ดังนั้น googledrivesync.exe นี้จึงเป็นของจริง
วิธีดูพอร์ต PID และชื่อกระบวนการใน PowerShell
PowerShell เป็นวิธีใหม่กว่าของ Microsoft ในการใช้ Command-line interface กับ Windows เราบอกว่าใหม่ แต่ก็มานานหลายเวอร์ชันแล้ว คุณควรเรียนรู้ PowerShell แม้จะเป็น Home user
คำสั่ง Windows ส่วนใหญ่ทำงานใน PowerShell ได้ นอกจากนี้เรายังรวมกับ Cmdlets ของ PowerShell ได้ (อ่านว่า command-lets) Joe จาก Winteltools.com จัดเตรียมสคริปต์สำหรับวิธีนี้
- เปิด Notepad และใส่โค้ดต่อไปนี้:
$netstat = netstat -aon | Select-String -pattern "(TCP|UDP)" $processList = Get-Process foreach ($result in $netstat) { $splitArray = $result -split " " $procID = $splitArray[$splitArray.length – 1] $processName = $processList | Where-Object {$_.id -eq $procID} | select processname $splitArray[$splitArray.length – 1] = $procID + " " + $processName.processname $splitArray -join " " }
- บันทึกไฟล์เป็น get-NetstatProcessName.ps1 จดไว้ว่าบันทึกที่ไหน สำคัญมาก ต้องเปลี่ยน Save as type: เป็น All Files (*.*) ไม่งั้นมันจะบันทึกเป็น get-NetstatProcessName.ps1.txt และจะไม่ทำงานให้เรา
- เปิด PowerShell และไปที่ตำแหน่งที่บันทึกสคริปต์ ในกรณีนี้คือ
cd C:\Scripts
กด Enter เพื่อรันคำสั่ง
- รันสคริปต์ด้วย dot-sourcing เพื่อให้ทำงาน นั่นคือ ใช้ ./ นำหน้าชื่อไฟล์ คำสั่งจะเป็น
./get-NetstatProcessName.ps1
- ตอนนี้เราเห็นข้อมูล netstat แบบเดิม พร้อมชื่อกระบวนการ ไม่ต้องเปิด Task Manager อีกแล้ว
ไปหามันซะ
เราได้ครอบคลุมสองวิธีในการใช้คำสั่ง netstat ดูพอร์ตที่กำลังฟัง สามารถใช้ได้ทั้งใน Command Prompt แบบเก่า หรือภายในสคริปต์ PowerShell ด้วยข้อมูลที่มันให้ เราได้ดูว่ามันช่วยให้เราทราบได้ว่าคอมพิวเตอร์ของเรากำลังทำอะไรอยู่
ถ้าคุณคิดว่า netstat เป็นยูทิลิตี้ที่ยอดเยี่ยง ลองดู Windows TCP/IP utilities อื่นๆ เช่น tracert, ipconfig, และ nslookup หรือใช้ Resource Monitor เพื่อดูการเชื่อมต่อเว็บไซต์และอินเทอร์เน็ตที่ซ่อนอยู่ ได้ดูรายละเอียดมากขึ้น มีอะไรมากมายที่คุณทำได้เพื่อดูว่าคอมพิวเตอร์ของคุณกำลังทำอะไรอยู่พอดี
คุณเคยใช้ netstat แก้ปัญหาไหม? บอกเราว่าคุณทำอะไร คำถามเกี่ยวกับการใช้ netstat? ถามเราในความคิดเห็นด้านล่างได้เลย