tcpdump を使用してキャプチャされたパケットを含むファイルを分析しようとしています。最初に、5 タプルを使用してパケットをフローに分類します。次に、各フローの各パケットのサイズと到着間隔を取得する必要があります。Wireshark で会話リストを試しましたが、フロー内の各パケットに関する情報ではなく、フロー内のパケット数のみが表示されます。ジョブを実行できるコード (C++ またはシェル スクリプト) の提案はありますか? ありがとうございました
3 に答える
うーんニョベ、
Scapy についてまだ聞いたことがなければ、あなたがやろうとしていることはほぼ完璧に当てはまると思います。たとえば、pcap フィールドを解析して、Scapy を使用して話しているようなものを提供するために、この小さなスニペットを書きました。
#!/usr/bin/python -tt
from scapy import *
import sys
from datetime import datetime
'''Parse PCAP files into easy to read NETFLOW like output\n
Usage:\n
python cap2netflow.py <[ pcap filename or -l ]>\n
-l is live capture switch\n
ICMP packets print as source ip, type --> dest ip, code'''
def parse_netflow(pkt):
# grabs 'netflow-esqe' fields from packets in a PCAP file
try:
type = pkt.getlayer(IP).proto
except:
pass
snifftime = datetime.fromtimestamp(pkt.time).strftime('%Y-%m-%d %H:%M:%S').split(' ')[1]
if type == 6:
type = 'TCP'
if type == 17:
type = 'UDP'
if type == 1:
type = 'ICMP'
if type == 'TCP' or type == 'UDP':
print( ' '.join([snifftime, type.rjust(4, ' '), str(pkt.getlayer(IP).src).rjust(15, ' ') , str(pkt.getlayer(type).sport).rjust(5, ' ') , '-->' , str(pkt.getlayer(IP).dst).rjust(15, ' ') , str(pkt.getlayer(type).dport).rjust(5, ' ')]))
elif type == 'ICMP':
print(' '.join([snifftime, 'ICMP'.rjust(4, ' '), str(pkt.getlayer(IP).src).rjust(15, ' ') , ('t: '+ str(pkt.getlayer(ICMP).type)).rjust(5, ' '), '-->' , str(pkt.getlayer(IP).dst).rjust(15, ' '), ('c: ' + str(pkt.getlayer(ICMP).code)).rjust(5, ' ')]))
else:
pass
if '-l' in sys.argv:
sniff(prn=parse_netflow)
else:
pkts = rdpcap(sys.argv[1])
print(' '.join(['Date: ',datetime.fromtimestamp(pkts[0].time).strftime('%Y-%m-%d %H:%M:%S').split(' ')[0]]))
for pkt in pkts:
parse_netflow(pkt)
Python と Scapy をインストールしてから、これを使用して開始します。すべてを理解するために支援が必要な場合はお知らせください。C++ の可能性がすでに十分に理解できるとわかっている場合はお知らせください。
スキャピーはこちら
http://www.secdev.org/projects/scapy/
このページには役立つチュートリアルへのリンクがたくさんあります。
これが役立つことを願っています!
直流
私はtcpダンプを分析するためにライブラリに取り組みましたが、それはビジネス用だったので、あなたに与えることはできません. 探しているものが見つからない場合は、私の答えが役立ちます。tcpdump は、tcpdump によって pcap レイヤーが追加されるマトリョーシカ人形のようなネストされたネットワーク データです。
キャプチャのみを処理する場合、ダンプの形式はLibpcap ファイル形式で指定されています。各パケットのサイズと到着時刻を取得するには、この仕様を使用してダンプを処理する必要があります。
分析をさらに深くする必要がある場合、これらは次のレイヤーです。
- リンク層
- インターネット層
- トランスポート層
- アプリケーション層
各レイヤーにはヘッダー定義があります。そのため、pcap データに含まれるプロトコル スタックを見つけ、ヘッダーを解析して情報を取得する必要があります。
5 タプルのメンバーは? フローが TCP または UDP の場合、送信元と宛先の IP アドレスとポート番号に加えて、おそらく、2 つのエンドポイント間で時間の経過とともに複数のフローを区別するための番号が機能します。SCTP の場合も同様ですが、フローがストリームの場合はさらに必要になる場合があります。
5 タプルのメンバーがすべて Wireshark の「名前付きフィールド」である場合、TShark を-T fields
オプションとともに使用し、オプションを使用し-e
て印刷するフィールドを指定し、タイム スタンプのあるフィールドを選択するframe.time_epoch
ことができます( UN*X エポックからの秒数および分数として)、適切なサイズのフィールド (frame.len
リンク層パケットの生のバイト数と、802.11無線情報のラジオタップ ヘッダーなどのメタデータを提供します)、およびその他のフィールドを指定し、TShark の出力を、必要な処理を実行するスクリプトまたはプログラムにフィードします。これにより、TShark がプロトコル層の処理を行うことができるため、プログラムは結果のデータのみを処理する必要があります。