事發經過

最近在寫網路爬蟲有用到 Fiddler 抓包軟體幫我看看用自己寫的程式送出與接收到的封包內容與直接用瀏覽器做這些動作有什麼不一樣, 進而去做一些程式碼的修改,一開始這個 Fiddler 抓包都用得好好的,但突然有一天一樣用 Fiddler 抓取我運行的爬蟲程式封包時候居然出現:

Traceback (most recent call last):
  File "main.py", line 426, in <module>
  File "main.py", line 363, in scrapping
  File "main.py", line 125, in login
  File "site-packages\requests\sessions.py", line 546, in get
  File "site-packages\requests\sessions.py", line 533, in request
  File "site-packages\requests\sessions.py", line 646, in send
  File "site-packages\requests\adapters.py", line 510, in send
requests.exceptions.ProxyError: HTTPSConnectionPool(host='my.ntu.edu.tw', port=443): Max retries exceeded with url: /stuLeaveManagement/login.aspx?firstpage=teacher (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 405 Method Not Allowed')))

平常不是都用得好好的嗎?怎麼突然就這樣了@@ 而且不只程式出現問題,我連瀏覽器都沒辦法上網了!由上面的情況與爆出的錯誤來看, 感覺起來應該不是程式碼上的問題了(我也記得我沒改甚麼東西...)。雖然上面的錯誤訊息沒有看得很懂,但是我覺得可能是 port 的問題, Fiddler 會用到 port:8888(如下圖), Fiddler的port設定

調查過程

可能是不知道被誰佔用了吧~當然要直接改 Fiddler 的 port 應該是可以的,但還是想要知道是甚麼程式在佔用,萬一是駭客怎麼辦@@ 因此就趕快上網查了一下 windows 查詢系統 port 的指令...,原來是netstat -ano啊~還順便查詢了參數的意義, 由於太多參數了,我就列出這次會用到的三個就好,如果想要知道其他的參數意義,就在自己的 windows 電腦輸入netstat /?吧~

NETSTAT [option]
  -a            顯示所有連線和接聽連接埠
  -n            以數字格式顯示位址和連接埠號碼
  -o            顯示與每個連線相關聯的擁有處理程序識別碼

喔...既然知道的指令與參數意義就來查詢看看吧!

C:\Users\SSJ>netstat -ano

使用中連線

  協定   本機位址               外部位址               狀態            PID
  TCP    0.0.0.0:111            0.0.0.0:0              LISTENING       4280
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       764
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING       4156
    ...
    ...
    ...
    ...

痾...好像有點多啊,要我一個一個去找 port:8888 也太累了吧...還好還有一個指令可以幫我們做這件事情,那就是find

FIND <你想要搜尋的字串> <檔名:對哪個檔案進行搜尋>

但我們沒有要對甚麼檔案進行搜尋啊,難道還要把netstat -ano的結果先輸出成檔案在搜尋嗎?哪有這麼白癡的設計,在這情況我們可以利用「|」 (pipe)符號來達成我們的目的,整個指令就變成了netstat -ano | find "8888",雖然運作原理不是很懂,但我想他運作機制簡單來說 應該就是將「|」左側netstat -ano所輸出的結果丟到「|」右側指令的輸入去,畫成簡圖應該是這樣: pipe的簡單解釋圖

所以這串指令就可以幫我們找到誰在佔用 port:8888 囉~

C:\Users\SSJ>netstat -ano | find "8888"
  TCP    127.0.0.1:8888         0.0.0.0:0              LISTENING       27140
  TCP    [::1]:8888             [::]:0                 LISTENING       27140
  UDP    0.0.0.0:28888          *:*                                    4156

喔...看起來有點複查啊,不過好像是看第一行結果(為什麼是看那行,原因有點複雜...反正就先查查看也不錯ˊˇˋ),得知是 PID=27140 這程式佔用了,那就到工作管理員>>處理程序來看看誰是 PID=27140,如果你的工作管理員>>處理程序沒有顯示 PID 的話,就在任一個欄位名稱點右鍵 ,把 PID 打勾就好了: 叫出PID

找到你了!!

PID為27140的傢伙   喔喔就是你!終於抓到了~看起來是個 python 的執行檔案,目前我好像沒有在跑什麼東西所以關掉應該沒差吧~果然關掉後我的程式重跑就沒問題了, 瀏覽器也可以正常的上網了~~~~


Comments

comments powered by Disqus