tcpdumpのパケットキャプチャ解析(強く推奨)

1 起因

いくつかの時間前に、ラインを調整するという問題があった:オンラインアプリケーションが不完全な取得でPOSTリクエスト、リクエストパラメータの体を受け入れ、不足している状況があります。問題は、確率は非常に高く、発生確率は約5%〜10%であり、散発的です。Wiresharkのとtcpdumpのパケットキャプチャ解析すべき問題の調査の過程で使用。私は、これら2つのツールは、彼らと仕事に非常に完璧な感じ。これらの2つのツールのすべてのネットワークトラフィックは、非表示にどこにもありません。

より良く、より簡単に、特にこの記事を仕上げ、これらのツールを十分に活用できるようにするために、私はあなたを与えるために収穫をもたらすことを願っています。皆のための問題のトラブルシューティングをした後、武器を追加します。

2のtcpdumpとWiresharkの紹介

デバッグのネットワークの問題では、指摘しておかなければtcpdumpのは、それがシンプルで強力なことを特徴としている、最も優れたツールでは必須のツール、およびLinuxです。これは、パケットスニファは、ネットワークカード上を流れるパケットを取得することができますのUnixシステムのコマンドラインツールに基づいています。

デフォルトでは、tcpdumpがメッセージを伝えるためにマシン内でクロールしません。ネットワークプロトコルスタックの下では、メッセージのため、宛先がローカルですが、またマシンがカーネルにAPIを介して確認してください通信であるので、マシンのネットワークプロトコル層を通過する必要があり、およびルーティングを完了した場合でも。[:SRC IPポートのDST IPポートなど機械などのTCP通信は、通信のソケットの基本的な要素である必要があります]

あなたは、パケットの他のホストのMACアドレスをクロールするためのtcpdumpを使用したい場合は、プロミスキャスモードでカードを有効にする必要があり、いわゆる無差別モード、最も簡単な言語はそのデータパケットを通じてクロールにすべてのカードを可能にするためであるとにかかわらず、パケットのは、それに対処されていませんまたはそれが送信されます。一般的には、Unixのは、それがとてもrootユーザーのみがプロミスキャスモードを、オープン混合回すことができ、いくつかのセキュリティ上の問題を引き起こす可能性があり、このようなTelnetユーザ名やパスワードなどの他人の情報を、見ることができるので、普通のユーザーは、プロミスキャスモードを設定することができません。コマンドモードは次のとおりです。ifconfigコマンドen0のpromisc無差別、EN0はあなたが無差別モードでカードを開く必要があります。

Linuxのパケットキャプチャの原則:

Linuxのパケットキャプチャプロセスは、ニュースネットワークパケットは、仮想基盤となるネットワークプロトコルを登録することにより、(正確なネットワーク機器であることを)正しく行われています。ネットワークカードがメッセージを受信すると、それがシステムを通じて、このようなイーサネットプロトコル、それをマウントし、プロセスパケットを解決しようとするモジュールを処理X25プロトコル、および類似したいくつかのファイルシステムとして登録されているすべてのネットワークプロトコルを、行きますそれはその後マウント完了し、すべての登録されたファイルシステム1は、彼が扱うことができると考えている場合は、しようとするシステムをマウントすることです。

キャプチャモジュールは、ネットワークプロトコルに変装した場合、システムはモジュール上で、今回のネットワークカードが受信したパケットの処理にそれを作るために擬似プロトコルのチャンスを与える時間内にメッセージを受信しましたスヌープパケットに機会を取るだろう、であること、このメッセージは、自分のメッセージをキャプチャモジュールへの報告、受信することがふり、そのままコピーです。

Wiresharkのは、それは、Linuxの場合はLinuxは一般のtcpdumpが付属しているので、一般的にのみ、直接使用のtcpdumpをWiresharkのグラフィカル・インターフェース・プラットフォームを使用して、ツール、Windowsプラットフォームのサポート、UNIXプラットフォーム、Macプラットフォームをテストするネットワークプロトコルである、またはtcpdumpオープンでキャプチャ後のWiresharkで分析しました。

Macプラットフォームでは、WiresharkのキャプチャWinPcapの、良いパッケージングを通じて、使いやすい、簡単に具体的に説明すれば、以下の通りを使用するだけで、ディスプレイフィルタまたはフィルタの開発をキャプチャすることができます。Wiresharkのは、ちょうどそれが簡単にどこダウンロードするために見つけることができますグーグル、無料のツールです。

そのため、tcpdumpのは、データ取り込みのために非常に便利ですが、Wiresharkのは、データをより便利なグリップを分析するために使用されます。

3 tcpdumpを使用

3.1構文

キーワードの種類

ホスト(デフォルトタイプ):のような、ホストを示します。ホスト210.27.48.2

ネット:のようなネットワーク・アドレスを指定します。net 202.0.0.0

ポート:ポート23:として指定したポート番号

キーワードの方向を決定します

SRC:SRC 210.27.48.2、IPパケットの送信元アドレス210.27.48.2

DST:ネット202.0.0.0 DST、宛先ネットワークアドレスが202.0.0.0であります

DSTまたはSRC(デフォルト)

DSTおよびSRC

キーワード協定:デフォルトでは、すべてのパケットプロトコルに耳を傾けることです

FDDI

IP

ARP

RARP

TCP

UDP

その他のキーワード

ゲートウェイ

放送

もっと少なく

大きいです

一般的な表現:とき多くの条件あなたは括弧を使用することができますが、あなたは脱出する場合

非:!または「ない」(二重引用符を除きます)

且:&&または「と」

或:|| または「or」

3.2オプション

 

技術の共有
 

3.3コマンドの練習

 

1、tcpdumpの直接開始は、すべての後の最初のパケットネットワークインターフェイス上フェッチ

技術の共有
 

2、すべての後にフェッチ指定されたパケットネットワークインタフェース

技術の共有
 

すべてのデータ10.37.63.255のEN0、送信元または宛先ネットワークをフェッチした後、3:

技術の共有
 

図4に示すように、通信ホストとホスト10.37.63.61または10.37.63.95 10.37.63.255の把持。

技術の共有
 

5、192.168.13.210 10.37.63.61パケットホストとのすべての通信をホストとホストを把持することに加えて:

技術の共有
 

図6に示すように、ホストおよびホスト10.37.63.255 10.37.63.61のIPパケット通信を把持することに加えてすべてのホスト

技術の共有
 

7、すべてのデータは、ホストをフェッチ10.37.63.3送信します:

技術の共有
 

8、受信したすべてのデータは、ホスト10.37.63.3をフェッチ:

技術の共有
 

9、ホストは、TCPポート80内のすべてのデータ・パケットをフェッチ10.37.63.3:

技術の共有
 

10、受信したパケット内のホスト10.37.63.3のHTTPポート80を把持:

技術の共有
 

11、ネットワークデータ25の全てEN0フェッチ、送信元または宛先ポート後

技術の共有
 

12は、すべてのフェッチEN0後、ネットワークはパケット192.168です

技術の共有
 

13、プロトコルフィルタリング

技術の共有
 

14、すべてのフェッチEN0、または宛先アドレスが192.168.1.254 192.168.1.200 TCPデータポート80になった後

技術の共有
 

15、全てEN0介してグラブは、宛先MACアドレスが00:ICMPデータ05:1時02:3:04

技術の共有
 

TCPデータの16、グラブすべてEN0を通じて、宛先ネットワークが192.168ではなく、宛先ホスト192.168.1.200

技術の共有
 

17、SYNパケットにのみ焦点を当てます

技術の共有
 

SYN、ACKを把握18、

技術の共有
 

図19は、SMTPデータを把握、データキャプチャ領域は「メール」16進数0x4d41494cで、「MAIL」パッケージを始め

技術の共有
 

20は、HTTP GETデータ、 "GET" 進数は0x47455420ですキャッチ

技術の共有
 

21、抓 SSH 返回,”SSH-“的十六进制是 0x5353482D

技術の共有
 

22、高级包头过滤如前两个的包头过滤,首先了解如何从包头过滤信息:

技術の共有
 

23、抓 DNS 请求数据

技術の共有
 

24、其他-c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C 还是抓的太多,于是可以用-c 参数指定抓多少个包。

技術の共有
 

3.4 抓个网站练练

想抓取访问某个网站时的网络数据。比如网站 http://www.baidu.com/ 怎么做?

1、通过tcpdump截获主机www.baidu.com发送与接收所有的数据包

技術の共有
 

2、访问这个网站

技術の共有
 

3、想要看到详细的http报文。怎么做?

技術の共有
 

4、分析抓取到的报文

技術の共有
 

4 tcpdump抓取TCP包分析

TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址、目的IP地址,以及TCP数据报首部的源端口地址和目的端口地址。TCP首部结构如下:

技術の共有
 

注意:通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手

其中在TCP连接和断开连接过程中的关键部分如下:

源端口号:即发送方的端口号,在TCP连接过程中,对于客户端,端口号往往由内核分配,无需进程指定;

目的端口号:即发送目的的端口号;

序号:即为发送的数据段首个字节的序号;

确认序号:在收到对方发来的数据报,发送确认时期待对方下一次发送的数据序号;

SYN:同步序列编号,Synchronize Sequence Numbers;

ACK:确认编号,Acknowledgement Number;

FIN:结束标志,FINish;

4.1 TCP三次握手

三次握手的过程如下:

技術の共有
 

step1. 由客户端向服务器端发起TCP连接请求。Client发送:同步序列编号SYN置为1,发送序号Seq为一个随机数,这里假设为X,确认序号ACK置为0;

step2. 服务器端接收到连接请求。Server响应:同步序列编号SYN置为1,并将确认序号ACK置为X+1,然后生成一个随机数Y作为发送序号Seq(因为所确认的数据报的确认序号未初始化);

step3. 客户端对接收到的确认进行确认。Client发送:将确认序号ACK置为Y+1,然后将发送序号Seq置为X+1(即为接收到的数据报的确认序号);

为什么是三次握手而不是两次对于step3的作用,假设一种情况,客户端A向服务器B发送一个连接请求数据报,然后这个数据报在网络中滞留导致其迟到了,虽然迟到了,但是服务器仍然会接收并发回一个确认数据报。但是A却因为久久收不到B的确认而将发送的请求连接置为失效,等到一段时间后,接到B发送过来的确认,A认为自己现在没有发送连接,而B却一直以为连接成功了,于是一直在等待A的动作,而A将不会有任何的动作了。这会导致服务器资源白白浪费掉了,因此,两次握手是不行的,因此需要再加上一次,对B发过来的确认再进行一次确认,即确认这次连接是有效的,从而建立连接。

对于双方,发送序号的初始化为何值有的系统中是显式的初始化序号是0,但是这种已知的初始化值是非常危险的,因为这会使得一些黑客钻漏洞,发送一些数据报来破坏连接。因此,初始化序号因为取随机数会更好一些,并且是越随机越安全。

tcpdump抓TCP三次握手抓包分析:

sudotcpdump-n-S-ilo0host10.37.63.3andtcpport8080

# 接着再运行:

curlhttp://10.37.63.3:8080/atbg/doc

控制台输出:

技術の共有
 

每一行中间都有这个包所携带的标志:

S=SYN,发起连接标志。

P=PUSH,传送数据标志。

F=FIN,关闭连接标志。

ack,表示确认包。

RST=RESET,异常关闭连接。

.,表示没有任何标志。

第1行:16:00:13.486776,从10.37.63.3(client)的临时端口61725向10.37.63.3(server)的8080监听端口发起连接,client初始包序号seq为1944916150,滑动窗口大小为65535字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为16344(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。【seq=1944916150,ack=0,syn=1】

第2行:16:00:13.486850,server响应连接,同时带上第一个包的ack信息,为client端的初始包序号seq加1,即1944916151,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号seq为1119565918,mss也是16344。【seq=1119565918,ack=1944916151,syn=1】

第3行:15:46:13.084161,client再次发送确认连接,tcp连接三次握手完成,等待传输数据包。【ack=1119565919,seq=1944916151】

4.2 TCP四次挥手

连接双方在完成数据传输之后就需要断开连接。由于TCP连接是属于全双工的,即连接双方可以在一条TCP连接上互相传输数据,因此在断开时存在一个半关闭状态,即有有一方失去发送数据的能力,却还能接收数据。因此,断开连接需要分为四次。主要过程如下:

技術の共有
 

step1. 主机A向主机B发起断开连接请求,之后主机A进入FIN-WAIT-1状态;

step2. 主机B收到主机A的请求后,向主机A发回确认,然后进入CLOSE-WAIT状态;

step3. 主机A收到B的确认之后,进入FIN-WAIT-2状态,此时便是半关闭状态,即主机A失去发送能力,但是主机B却还能向A发送数据,并且A可以接收数据。此时主机B占主导位置了,如果需要继续关闭则需要主机B来操作了;

step4. 主机B向A发出断开连接请求,然后进入LAST-ACK状态;

step5. 主机A接收到请求后发送确认,进入TIME-WAIT状态,等待2MSL之后进入CLOSED状态,而主机B则在接受到确认后进入CLOSED状态;

为何主机A在发送了最后的确认后没有进入CLOSED状态,反而进入了一个等待2MSL的TIME-WAIT主要作用有两个:

第一,确保主机A最后发送的确认能够到达主机B。如果处于LAST-ACK状态的主机B一直收不到来自主机A的确认,它会重传断开连接请求,然后主机A就可以有足够的时间去再次发送确认。但是这也只能尽最大力量来确保能够正常断开,如果主机A的确认总是在网络中滞留失效,从而超过了2MSL,最后也无法正常断开;

第二,如果主机A在发送了确认之后立即进入CLOSED状态。假设之后主机A再次向主机B发送一条连接请求,而这条连接请求比之前的确认报文更早地到达主机B,则会使得主机B以为这条连接请求是在旧的连接中A发出的报文,并不看成是一条新的连接请求了,即使得这个连接请求失效了,增加2MSL的时间可以使得这个失效的连接请求报文作废,这样才不影响下次新的连接请求中出现失效的连接请求。

为什么断开连接请求报文只有三个,而不是四个因为在TCP连接过程中,确认的发送有一个延时(即经受延时的确认),一端在发送确认的时候将等待一段时间,如果自己在这段事件内也有数据要发送,就跟确认一起发送,如果没有,则确认单独发送。而我们的抓包实验中,由服务器端先断开连接,之后客户端在确认的延迟时间内,也有请求断开连接需要发送,于是就与上次确认一起发送,因此就只有三个数据报了。

5 Wireshark分析tcpdump抓包结果

 

1、启动8080端口,tcpdump抓包命令如下:

tcpdump-ilo0-s0-n-Shost10.37.63.3andport8080-w./Desktop/tcpdump_10.37.63.3_8080_20160525.cap

# 然后再执行curl

curlhttp://10.37.63.3:8080 / atbg / DOC

2、ファイルtcpdump_10.37.63.3_8080_20160525.capを開くためのWiresharkを使用

技術の共有
 

第1-4行目:TCP 3ウェイハンドシェイクのリンク;

行番号5-8:TCPデータ伝送リンク。

第9-13行:TCP 4波リンク。

3ところで、HTTPリクエストとレスポンスを表示する方法:

技術の共有
 

以下に示すように、要求情報の赤い部分の上に、青色の部分に応答して次の情報をポップ。

技術の共有
 

これらは、Wiresharkのは、より強力なフィルタツールです、あなたは比較的クール、Wiresharkのに自分自身でより多くの研究を学ぶことができ、tcpdumpを分析するためにWiresharkのを使用して簡単です。

おすすめ

転載: www.cnblogs.com/bidad/p/11868859.html