libpcapとsnortを使用して大容量(1 GB全二重、最大2 GBの集約)ネットワークリンクをスニッフィングするときに問題が発生したときに得た知識を共有したいと思いました。アプリケーションはすべてのトラフィックを正常に傍受しますが、ファイルサイズが2 GBに達するとクラッシュします。
2 GBのファイルの作成に問題がある場合、それをサポートするファイルシステムがある場合や、カーネルがそれをサポートしていることがわかっている場合でも、これは最適です。
libpcapとsnortを使用して大容量(1 GB全二重、最大2 GBの集約)ネットワークリンクをスニッフィングするときに問題が発生したときに得た知識を共有したいと思いました。アプリケーションはすべてのトラフィックを正常に傍受しますが、ファイルサイズが2 GBに達するとクラッシュします。
2 GBのファイルの作成に問題がある場合、それをサポートするファイルシステムがある場合や、カーネルがそれをサポートしていることがわかっている場合でも、これは最適です。
回答:
Linuxの大容量ファイルサポート(> 2GB)は、最大ファイルサイズが2 GBに制限されないように、3つの別々の場所で対処する必要があります。
カーネルで有効化された大容量ファイルのサポート
大きなファイルサイズをサポートするファイルシステム(多くのLinuxベースのファイルシステムはサポートしています(ext3、reiserfs> = 3.6など))
使用するライブラリまたはアプリケーション内での大容量ファイルのサポート
大きなファイルのカーネルサポートは、2.4.0-test7以降にあります。カスタムカーネルを使用する場合は、大きなファイルのオプションが含まれていることを確認してください。
ほとんどのLinuxファイルシステムは大きなファイルをサポートしていますが、ネットワークファイルシステムを使用すると問題が発生する場合があります。
最後に、ライブラリ(つまりlibpcap)とアプリケーションは、gccオプション-D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS = 64を使用してコンパイルする必要があります。使用しているパッケージがこれらのオプションを使用してプリコンパイルされているか、独自のパッケージをロールしていることを確認してください。
詳細はこちらをご覧ください。
_FILE_OFFSET_BITS
合格O_LARGEFILE
へのopen
正しいアーチ上のシステムコールが、 _FILE_OFFSET_BITS
移植性のために好ましい:stackoverflow.com/questions/2888425/...
これはlibpcapの問題のようです...最初の回答で述べたように。
libpcapを再コンパイルするか、別のバージョンを見つけます。