調試技巧--Windows端口號是否被占用
一、端口概念
10.0.0.0~10.255.255.255,172.16.0.0~172.16.255.255, 192.168.0.0~192.168.255.255。
端口概念
在網絡技術中,端口(Port)大致有兩種意思:一是物理意義上的端口,比如,ADSL Modem、集線器、交換機、路由器用於連接其他網絡設備的接口,如RJ-45端口、SC端口等等。二是邏輯意義上的端口,一般是指TCP/IP協議中的端口,端口號的范圍從0到65535,比如用於瀏覽網頁服務的80端口,用於FTP服務的21端口等等。
我們這里將要介紹的就是邏輯意義上的端口。
(1)知名端口(Well-Known Ports)
知名端口即眾所周知的端口號,范圍從0到1023,這些端口號一般固定分配給一些服務。比如21端口分配給FTP服務,25端口分配給SMTP(簡單郵件傳輸協議)服務,80端口分配給HTTP服務,135端口分配給RPC(遠程過程調用)服務等等。
(2)動態端口(Dynamic Ports)
動態端口的范圍從1024到65535,這些端口號一般不固定分配給某個服務,也就是說許多服務都可以使用這些端口。只要運行的程序向系統提出訪問網絡的申請,那么系統就可以從這些端口號中分配一個供該程序使用。比如1024端口就是分配給第一個向系統發出申請的程序。在關閉程序進程后,就會釋放所占用的端口號
端口映射
端口映射其實就是常說的NAT地址轉換的一種,其功能就是把在公網的地址轉翻譯成私有地址, 采用路由方式的ADSL寬帶路由器擁有一個動態或固定的公網IP,ADSL直接接在HUB或交換機上,所有的電腦共享上網。
二、查看Windows端口是否打開
使用telnet命令
在命令行中,運行telnet ip地址 端口號
C:\Users\yankan>telnet -h telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]] -a 企圖自動登錄。除了用當前已登陸的用戶名以外,與 -l 選項相同。 -e 跳過字符來進入 telnet 客戶端提示。 -f 客戶端登錄的文件名 -l 指定遠程系統上登錄用的用戶名稱。 要求遠程系統支持 TELNET ENVIRON 選項。 -t 指定終端類型。 支持的終端類型僅是: vt100, vt52, ansi 和 vtnt。 host 指定要連接的遠程計算機的主機名或 IP 地址。 port 指定端口號或服務名。
使用telnet ip地址 端口號方式來測試,該端口是否開放。
連接失敗:
C:\Users\yankan>telnet 10.1.37.214 9999
正在連接10.1.37.214...無法打開到主機的連接。 在端口 9999: 連接失敗
連接成功,跳轉到telnet畫面或者提示連接成功
開啟Telnet服務
如果使用telnet命令,提示不存在此命令,則需要開啟
1、安裝系統:依次點擊“開始”→“控制面板”→“程序”,“在程序和功能”找到並點擊“打開或關閉Windows功能”進入Windows 功能設置對話框。找到並勾選“Telnet客戶端”和“Telnet服務器”,最后“確定”稍等片刻即可完成安裝。
2、啟動服務:在Windows 7系統中“開始”→“運行”,輸入servcies.msc打開服務管理器。找到並雙擊Telnet服務項,設置其啟動方式為“手動”(更安全,只在需要的時候才啟用),最后在系統中“啟動”該服務“確定”退出即可。
三、檢查Windows端口號是否被占用情況,並打開關閉端口
Windows平台
在windows命令行窗口下執行: netstat -ano
我們可以知道某一端口被那個進程(對應PID)占用;
然后我們可以打開任務管理器;查看某一PID對應的進程名;
如果PID沒有顯示,菜單》查看》選擇列》選中PID即可;
得知進程后,我們可以將進程殺掉;修改其使用的端口。
繼續執行下面命令:
netstat -aon|findstr "80"
TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 200
看到了嗎,端口被進程號為2016的進程占用,繼續執行下面命令:
tasklist|findstr "200" skype.exe 200 Console 0 16,064 K
很清楚吧,skype.exe占用了你的端口
netstat 命令
命令格式:
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
-a 顯示所有連接和監聽端口。
-b 顯示包含於創建每個連接或監聽端口的可執行組件。在某些情況下已知可執行組件擁有多個獨立組件,並且在這些情況下包含於創建連接或監聽端口的組件序列被顯示。這種情況下,可執行組件名在底部的 [] 中,頂部是其調用的組件,等等,直到 TCP/IP 部分。注意此選項可能需要很長時間,如果沒有足夠權限可能失敗。
-e 顯示以太網統計信息。此選項可以與 -s選項組合使用。
-n 以數字形式顯示地址和端口號。
-o 顯示與每個連接相關的所屬進程 ID。
-p proto 顯示 proto 指定的協議的連接;proto 可以是下列協議之一: TCP、UDP、TCPv6 或 UDPv6。
如果與 -s 選項一起使用以顯示按協議統計信息,proto 可以是下列協議之一:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-r 顯示路由表。
-s 顯示按協議統計信息。默認地,顯示 IP、
IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統計信息;
-p 選項用於指定默認情況的子集。
-v 與 -b 選項一起使用時將顯示包含於為所有可執行組件創建連接或監聽端口的組件。
interval 重新顯示選定統計信息,每次顯示之間暫停時間間隔(以秒計)。按 CTRL+C 停止重新顯示統計信息。如果省略,netstat 顯示當前配置信息(只顯示一次)
四、進程
1、查看進程信息
tasklist
效果:
2、查詢所有進程對應的系統服務
tasklist /svc
3、查看所有進行關聯的模塊信息,如dll
tasklist /m
后面可跟具體的dll的名稱,查看這個dll被哪些服務使用
4、根據進程id查看進行的詳細信息
tasklist /fi "pid eq 4284"
效果
5、根據進程id殺死進程
taskkill /pid 6636 -f
/pid代表進程id, -f為強制關閉。
6、根據進行名殺死進程
taskkill /im notepad.exe -f