<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 5.5 封包擷取功能 很多時候由于我們的網絡聯機出現問題,使用類似 ping 的軟件功能卻又無法找出問題點,最常見的是因為路由與 IP 轉遞后所產生的一些困擾 (請參考防火墻與 NAT 主機部分),這個時候要怎么辦?最簡單的方法就是『分析封包的流向』啰!透過分析封包的流向,我們可以了解一條聯機應該是如何進行雙向的聯機的動作, 也就會清楚的了解到可能發生的問題所在了!底下我們就來談一談這個 tcpdump 與圖形接口的封包分析軟件吧! * * * ### 5.5.1 文字接口封包擷取器: tcpdump 說實在的,對于 tcpdump 這個軟件來說,你甚至可以說這個軟件其實就是個黑客軟件, 因為他不但可以分析封包的流向,連封包的內容也可以進行『監聽』, 如果你使用的傳輸數據是明碼的話,不得了,在 router 或 hub 上面就可能被人家監聽走了! 我們在[第二章談到的 CSMA/CD](http://linux.vbird.org/linux_server/0110network_basic.php#tcpip_link_csmacd) 流程中,不是說過有所謂的『監聽軟件』嗎?這個 tcpdump 就是啦! 很可怕吶!所以,我們也要來了解一下這個軟件啊!(注:這個 tcpdump 必須使用 root 的身份執行) ``` [root@www ~]# tcpdump [-AennqX] [-i 接口] [-w 儲存檔名] [-c 次數] \ [-r 檔案] [所欲擷取的封包數據格式] 選項與參數: -A :封包的內容以 ASCII 顯示,通常用來捉取 WWW 的網頁封包資料。 -e :使用資料連接層 (OSI 第二層) 的 MAC 封包數據來顯示; -nn:直接以 IP 及 port number 顯示,而非主機名與服務名稱 -q :僅列出較為簡短的封包信息,每一行的內容比較精簡 -X :可以列出十六進制 (hex) 以及 ASCII 的封包內容,對于監聽封包內容很有用 -i :后面接要『監聽』的網絡接口,例如 eth0, lo, ppp0 等等的界面; -w :如果你要將監聽所得的封包數據儲存下來,用這個參數就對了!后面接檔名 -r :從后面接的檔案將封包數據讀出來。那個『檔案』是已經存在的檔案, 并且這個『檔案』是由 -w 所制作出來的。 -c :監聽的封包數,如果沒有這個參數, tcpdump 會持續不斷的監聽, 直到使用者輸入 [ctrl]-c 為止。 所欲擷取的封包數據格式:我們可以專門針對某些通訊協議或者是 IP 來源進行封包擷取, 那就可以簡化輸出的結果,并取得最有用的信息。常見的表示方法有: 'host foo', 'host 127.0.0.1' :針對單部主機來進行封包擷取 'net 192.168' :針對某個網域來進行封包的擷取; 'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制 'tcp port 21':還可以針對通訊協議偵測,如 tcp, udp, arp, ether 等 還可以利用 and 與 or 來進行封包數據的整合顯示呢! # 范例一:以 IP 與 port number 捉下 eth0 這個網絡卡上的封包,持續 3 秒 [root@www ~]# tcpdump -i eth0 -nn tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 17:01:47.360523 IP 192.168.1.101.1937 &gt; 192.168.1.100.22: Flags [.], ack 196, win 65219, &lt;u&gt;17:01:47.362139 IP 192.168.1.100.22 &gt; 192.168.1.101.1937: Flags [P.], seq 196:472, ack 1,&lt;/u&gt; 17:01:47.363201 IP 192.168.1.100.22 &gt; 192.168.1.101.1937: Flags [P.], seq 472:636, ack 1, 17:01:47.363328 IP 192.168.1.101.1937 &gt; 192.168.1.100.22: Flags [.], ack 636, win 64779, &lt;==按下 [ctrl]-c 之后結束 6680 packets captured &lt;==捉下來的封包數量 14250 packets received by filter &lt;==由過濾所得的總封包數量 7512 packets dropped by kernel &lt;==被核心所丟棄的封包 ``` 如果你是第一次看 tcpdump 的 man page 時,肯定一個頭兩個大,因為 tcpdump 幾乎都是分析封包的表頭數據,用戶如果沒有簡易的網絡封包基礎,要看懂粉難吶! 所以,至少你得要回到[網絡基礎](http://linux.vbird.org/linux_server/0110network_basic.php)里面去將 TCP 封包的表頭資料理解理解才好啊! ^_^!至于那個范例一所產生的輸出范例中,我們可以約略區分為數個字段, 我們以范例一當中那個特殊字體行來說明一下: * 17:01:47.362139:這個是此封包被擷取的時間,『時:分:秒』的單位; * IP:透過的通訊協議是 IP ; * 192.168.1.100.22 &gt; :傳送端是 192.168.1.100 這個 IP,而傳送的 port number 為 22,你必須要了解的是,那個大于 (&gt;) 的符號指的是封包的傳輸方向喔! * 192.168.1.101.1937:接收端的 IP 是 192.168.1.101, 且該主機開啟 port 1937 來接收; * [P.], seq 196:472:這個封包帶有 PUSH 的數據傳輸標志, 且傳輸的數據為整體數據的 196~472 byte; * ack 1:ACK 的相關資料。 最簡單的說法,就是該封包是由 192.168.1.100 傳到 192.168.1.101,透過的 port 是由 22 到 1937 , 使用的是 PUSH 的旗標,而不是 SYN 之類的主動聯機標志。呵呵!不容易看的懂吧!所以說,上頭才講請務必到 [TCP 表頭數據](http://linux.vbird.org/linux_server/0110network_basic.php#tcpip_transfer_tcp)的部分去瞧一瞧的啊! 再來,一個網絡狀態很忙的主機上面,你想要取得某部主機對你聯機的封包數據而已時, 使用 tcpdump 配合管線命令與正規表示法也可以,不過,畢竟不好捉取! 我們可以透過 tcpdump 的表示法功能,就能夠輕易的將所需要的數據獨立的取出來。 在上面的范例一當中,我們僅針對 eth0 做監聽,所以整個 eth0 接口上面的數據都會被顯示到屏幕上, 不好分析啊!那么我們可以簡化嗎?例如只取出 port 21 的聯機封包,可以這樣做: ``` [root@www ~]# tcpdump -i eth0 -nn port 21 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 01:54:37.96 IP 192.168.1.101.1240 &gt; 192.168.1.100.21: . ack 1 win 65535 01:54:37.96 IP 192.168.1.100.21 &gt; 192.168.1.101.1240: P 1:21(20) ack 1 win 5840 01:54:38.12 IP 192.168.1.101.1240 &gt; 192.168.1.100.21: . ack 21 win 65515 01:54:42.79 IP 192.168.1.101.1240 &gt; 192.168.1.100.21: P 1:17(16) ack 21 win 65515 01:54:42.79 IP 192.168.1.100.21 &gt; 192.168.1.101.1240: . ack 17 win 5840 01:54:42.79 IP 192.168.1.100.21 &gt; 192.168.1.101.1240: P 21:55(34) ack 17 win 5840 ``` 瞧!這樣就僅提出 port 21 的信息而已,且仔細看的話,你會發現封包的傳遞都是雙向的, client 端發出『要求』而 server 端則予以『響應』,所以,當然是有去有回啊! 而我們也就可以經過這個封包的流向來了解到封包運作的過程。舉例來說: 1. 我們先在一個終端機窗口輸入『 tcpdump -i lo -nn 』 的監聽, 2. 再另開一個終端機窗口來對本機 (127.0.0.1) 登入『ssh localhost』 那么輸出的結果會是如何? ``` [root@www ~]# tcpdump -i lo -nn 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes 3 11:02:54.253777 IP 127.0.0.1.32936 &gt; 127.0.0.1.22: S 933696132:933696132(0) win 32767 &lt;mss 16396,sackOK,timestamp 236681316 0,nop,wscale 2&gt; 4 11:02:54.253831 IP 127.0.0.1.22 &gt; 127.0.0.1.32936: S 920046702:920046702(0) ack 933696133 win 32767 &lt;mss 16396,sackOK,timestamp 236681316 236681316,nop, wscale 2&gt; 5 11:02:54.253871 IP 127.0.0.1.32936 &gt; 127.0.0.1.22: . ack 1 win 8192 &lt;nop, nop,timestamp 236681316 236681316&gt; 6 11:02:54.272124 IP 127.0.0.1.22 &gt; 127.0.0.1.32936: P 1:23(22) ack 1 win 8192 &lt;nop,nop,timestamp 236681334 236681316&gt; 7 11:02:54.272375 IP 127.0.0.1.32936 &gt; 127.0.0.1.22: . ack 23 win 8192 &lt;nop, nop,timestamp 236681334 236681334&gt; ``` 上表顯示的頭兩行是 tcpdump 的基本說明,然后: * 第 3 行顯示的是『來自 client 端,帶有 SYN 主動聯機的封包』, * 第 4 行顯示的是『來自 server 端,除了響應 client 端之外(ACK),還帶有 SYN 主動聯機的標志; * 第 5 行則顯示 client 端響應 server 確定聯機建立 (ACK) * 第 6 行以后則開始進入數據傳輸的步驟。 從第 3-5 行的流程來看,熟不熟悉啊?沒錯!那就是[三向交握](http://linux.vbird.org/linux_server/0110network_basic.php#tcpip_transfer_tcphand)的基礎流程啦!夠有趣吧! 不過 tcpdump 之所以被稱為黑客軟件之一可不止上頭介紹的功能吶! 上面介紹的功能可以用來作為我們主機的封包聯機與傳輸的流程分析, 這將有助于我們了解到封包的運作,同時了解到主機的防火墻設定規則是否有需要修訂的地方。 更神奇的使用要來啦!如果我們使用 tcpdump 在 router 上面監聽『明碼』的傳輸數據時, 例如 FTP 傳輸協議,你覺得會發生什么問題呢? 我們先在主機端下達『 tcpdump -i lo port 21 -nn -X 』然后再以 ftp 登入本機,并輸入賬號與密碼, 結果你就可以發現如下的狀況: ``` [root@www ~]# tcpdump -i lo -nn -X 'port 21' 0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@....... 0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I.\.% 0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....&lt;.........g 0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd. 0x0040: 322e 302e 3129 0d0a 2.0.1).. 0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY.... 0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!] 0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7 0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai. 0x0040: 0a . 0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.iL.... 0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f .........\.2.U!. 0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....&gt;........2' 0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw 0x0040: 6f72 6469 7379 6f75 0d0a ordisyou.. ``` 上面的輸出結果已經被簡化過了,你必須要自行在你的輸出結果當中搜尋相關的字符串才行。 從上面輸出結果的特殊字體中,我們可以發現『該 FTP 軟件使用的是 vsftpd ,并且使用者輸入 dmtsai 這個賬號名稱,且密碼是 mypasswordisyou』 嘿嘿!你說可不可怕啊!如果使用的是明碼的方式來傳輸你的網絡數據? 所以我們才常常在講啊,網絡是很不安全滴! 另外你得了解,為了讓網絡接口可以讓 tcpdump 監聽,所以執行 tcpdump 時網絡接口會啟動在 『錯亂模式 (promiscuous)』,所以你會在 /var/log/messages 里面看到很多的警告訊息, 通知你說你的網絡卡被設定成為錯亂模式!別擔心,那是正常的。至于更多的應用,請參考 man tcpdump 啰! 例題:如何使用 tcpdump 監聽 (1)來自 eth0 適配卡且 (2)通訊協議為 port 22 ,(3)封包來源為 192.168.1.101 的封包資料?答:tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.101' * * * ### 5.5.2 圖形接口封包擷取器: wireshark tcpdump 是文字接口的封包擷取器,那么有沒有圖形接口的?有啊!那就是 wireshark ([注1](#ps1)) 這套軟件。這套軟件早期稱為 ethereal ,目前同時提供文字接口的 tethereal 以及圖形接口的 wireshark 兩個咚咚。由于我們當初安裝時預設并沒有裝這套,因此妳必須要先使用 yum 去網絡安裝喔!也可以拿出光盤來安裝啦!有兩套需要安裝,分別是文字接口的 wireshark 以及圖形接口的 wireshark-gnome 軟件。安裝方式如下: ``` [root@www ~]# yum install wireshark wireshark-gnome ``` 啟動這套軟件的方法很簡單,你必須要在 X Window 底下,透過『應用程序』--&gt;『因特網』--&gt;『wireshark network analyzer』就可以啟動啦!啟動的畫面如下所示: ![](https://box.kancloud.cn/2016-05-13_5735da4e40965.gif) 圖 5.5-1、wireshark 的使用示意圖 其實這一套軟件功能非常強大!鳥哥這里僅講簡單的用法,若有特殊需求,就得要自己找找數據啰。 想要開始擷取封包前,得要設定一下監聽的接口之類的,因此點選圖 5.5-1 畫面中的網絡卡小圖標吧! 就會出現如下的畫面給你選擇了。 ![](https://box.kancloud.cn/2016-05-13_5735da4e5ca4e.gif) 圖 5.5-2、wireshark 的使用示意圖 在上圖中,你得先選擇想要監聽的接口,鳥哥這里因為擔心外部的封包太多導致畫面很亂,因此這里使用內部的 lo 接口來作為范例。你得要注意, lo 平時是很安靜的!所以,鳥哥在點選了『start』之后,還有打開終端機, 之后使用『 ssh localhost 』來嘗試登入自己,這樣才能夠獲得封包喔!如下圖所示: ![](https://box.kancloud.cn/2016-05-13_5735da4e78458.gif) 圖 5.5-3、wireshark 的使用示意圖 若沒有問題,等到你擷取了足夠的封包想要進行分析之后,按下圖 5.5-3 畫面中的停止小圖示,那么封包擷取的動作就會終止, 接下來,就讓我們來開始分析一下封包吧! ![](https://box.kancloud.cn/2016-05-13_5735da4e9546c.gif) 圖 5.5-4、wireshark 的使用示意圖 整個分析的畫面如上所示,畫面總共分為三大區塊,你可以將鼠標光標移動到每個區塊中間的移動棒, 就可以調整每個區塊的范圍大小了。第一區塊主要顯示的是封包的標頭資料,內容就有點類似 tcpdump 的顯示結果,第二區塊則是詳細的表頭資料,包括訊框的內容、通訊協議的內容以及 socket pair 等等信息。 第三區塊則是 16 進位與 ASCII 碼的顯示結果 (詳細的封包內容)。 如果你覺得某個封包有問題,在畫面 1 的地方點選該封包 (圖例中是第 6 個封包),那么畫面 2 與 3 就會跟著變動!由于鳥哥測試的封包是加密數據的封包,因此畫面 2 顯示出封包表頭,但畫面 3 的封包內容就是亂碼啦! 透過這個 wireshark 你就可以一口氣得到所需要的所有封包內容啦!而且還是圖形接口的,很方便吧! * * * ### 5.5.3 任意啟動 TCP/UDP 封包的埠口聯機: nc, netcat 這個 nc 指令可以用來作為某些服務的檢測,因為他可以連接到某個 port 來進行溝通,此外,還可以自行啟動一個 port 來傾聽其他用戶的聯機吶!非常的不錯用!如果在編譯 nc 軟件的時候給予『GAPING_SECURITY_HOLE』參數的話,嘿嘿! 這個軟件還可以用來取得客戶端的 bash 哩!可怕吧!我們的 CentOS 預設并沒有給予上面的參數, 所以我們不能夠用來作為黑客軟件~但是 nc 用來取代 telnet 也是個很棒的功能了!(有的系統將執行文件 nc 改名為 netcat 啦!) ``` [root@www ~]# nc [-u] [IP&#124;host] [port] [root@www ~]# nc -l [IP&#124;host] [port] 選項與參數: -l :作為監聽之用,亦即開啟一個 port 來監聽用戶的聯機; -u :不使用 TCP 而是使用 UDP 作為聯機的封包狀態 # 范例一:與 telnet 類似,連接本地端的 port 25 查閱相關訊息 [root@www ~]# yum install nc [root@www ~]# nc localhost 25 ``` 這個最簡單的功能與 telnet 幾乎一樣吧!可以去檢查某個服務啦!不過,更神奇的在后面, 我們可以建立兩個聯機來傳訊喔!舉個例子來說,我們先在服務器端啟動一個 port 來進行傾聽: ``` # 范例二:激活一個 port 20000 來監聽使用者的聯機要求 [root@www ~]# nc -l localhost 20000 & [root@www ~]# netstat -tlunp &#124; grep nc tcp 0 0 ::1:20000 :::* LISTEN 5433/nc # 啟動一個 port 20000 在本機上! ``` 接下來你再開另外一個終端機來看看,也利用 nc 來聯機服務器,并且輸入一些指令看看喔! ``` [root@www ~]# nc localhost 20000 &lt;==這里可以開始輸入字符串了! ``` 此時,在客戶端我們可以打入一些字,你會發現在服務器端會同時出現你輸入的字眼吶! 如果你同時給予一些額外的參數,例如利用標準輸入與輸出 (stdout, stdin) 的話,那么就可以透過這個聯機來作很多事情了! 當然 nc 的功能不只如此,你還可以發現很多的用途喔! 請自行到你主機內的 /usr/share/doc/nc-1.84/scripts/ 目錄下看看這些 script ,有幫助的吶! 不過,如果你需要額外的編譯出含有 GAPING_SECURITY_HOLE 功能, 以使兩端聯機可以進行額外指令的執行時,就得要自行下載原始碼來編譯了! * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看