Wireshark抓包工具的使用

對於網絡請求相關的異常,抓包是一個很有效的方法,要習慣於抓包,而不是單純地打印日誌。日誌能看到的是我們預想的,抓包抓到的則是意外的我們預想不到的。比如在實際生產中,常常出現程序異常崩潰的情況,這個時候往往日誌是來不及記錄的,如果這個崩潰是網絡請求導致的,這個時候你用抓包工具,就很容易定位到問題原因。比如之前我一個同事寫的程序總是在服務器停止幾秒鐘後崩潰,我們看了所有的日誌,研究了windows的日誌記錄器,都未能找出有用的信息,後來我們想既然是服務器引起的,那麼抓包應該是沒問題的,就嘗試了一下。最終我們發現他寫的程序在每隔幾秒鐘就往服務器請求一次接口,這是他用來做心跳用的。但是他的源碼並沒有對這部分代碼try...catch...。他是在程序的最上層進行的try...catch...。但他這個心跳是在一個子線程裏面,這就導致catch不到任何異常,一旦服務器停止了,他的網絡請求就會異常,導致程序崩潰。比如下面的代碼:

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            try
            {
                Thread thread = new Thread(() =>
                {
                    throw new Exception();
                });
                thread.Start();
            }
            catch (Exception ex)
            {

            }
            Console.ReadLine();
        }

這種情況不管是在java中還是在c#中都是如此,主線程catch不到子線程的異常。

我們當時用的抓包工具是Wireshark,還有另外一個抓包工具Fiddler,但是它好像只能抓http的包,我很少用它。使用wireshark有可能會出現找不到接口的情況,大部分情況下,通過安裝WinPcap都能解決,下載網址:https://www.winpcap.org/install/default.htm

打開之後界面如下:

這個是我的電腦能夠抓到的接口,只有以太網這一個。雙擊它,可以看到具體的網絡請求信息:

工具的使用網上有很多教程,這裏就不贅述了,只說幾個有用的過濾條件。一般我們都是抓指定地址的指定端口和指定協議的包,那麼這個過濾該怎麼寫呢,如下:

ip.dst==112.80.248.75 and ip.src==127.0.0.1 and http and tcp.port==80 and tcp.srcport==8080

上面的意思是過濾出目標地址爲112.80.248.75,請求地址爲127.0.0.1,且端口爲80,且源端口爲8080的所有http請求,當然了,這樣寫出來的過濾條件是衝突的,這裏只是爲了演示所有的常用命令,所以全部列出來了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章