ファイル(cap.pcap)を生成するPythonスクリプトがあります。猫を猫でつかむと永遠に付いています(何も表示されません)。私は実行しようとしています:
- コマンドファイルhdとvi。彼らはうまくいきます。
- lsofとfusionerは何も表示しません。
- cpを別のファイルに移動し、後者をキャットします。ついています。
- 他のファイルにddしても結果は同じです。
< base64 cap.pcap > b64; < base64 -d b64 > cap2.pcap; cat cap2.pcap;
また詰まっていますね。- テストのためにbase64コンテンツを別のコンピュータに送信すると、正常に動作します。
また、他のファイルに対してcatを実行すると動作します。
バージョン:
- Ubuntu 18.04.1
- Cat(GNU coreutils) 8.28
役に立つ場合に備えて、Pythonスクリプトの次の部分がこれを担当します。
import pcapy
data = []
cap = pcapy.open_live("enp0s3" , 65536 , 1 , 0)
dumper = cap.dump_open('cap.pcap')
for i in range(20):
hdr, pkt = cap.next()
dumper.dump(hdr, pkt)
if i%10 == 9:
f = open('cap.pcap', 'rb+')
data += f.read();
f.truncate(0)
f.close()
dumper.close()
答え1
短い答え
cat
ほとんどいつも彼のせいではないと思うかもしれません。そのように大きくて明白なバグを持つことは、あまりにも一般的で、よくテストされており、単純です。cat
端末にバイナリファイルのみを送信しないでください。端末は、任意のバイナリデータではなくテキストを表示するように設計されています。
長い答え
停止したのはプロセス自体ではなく、ウィンドウを表示するcat
プログラムである端末エミュレータです。cat
ファイル自体の実際の内容は気にせず、ファイルのすべての内容を標準出力1にコピーするだけです。 (理論的には)可能で、cat /dev/sda
ハードドライブ全体の内容を端末に幸せにダンプします。
しかし、端末エミュレータは、任意のバイナリデータを表示するように設計されていません。これは、テキストを表示するために使用され、制御コードと呼ばれる印刷できない文字の特殊シーケンスを挿入することによって変更できます。脱出コード、ほとんどは "エスケープ文字"(\x1B
、一般的に で表される^[
)で始まるからです。
バイナリデータを端末にダンプすると、エスケープ文字(またはそれに関連する他の文字)が表示され、エスケープコードを解釈しようとすることができます。つまり、少なくとも実際に有効なシーケンスを形成していることを確認できるまでは、次の文字は表示されません。もう1つの可能性は、端末を消去したり(何も印刷されていないように見せたり)、前景色を変更したり(すべての後続の出力に何も印刷しないようにするなど)、特別な動作をトリガーする有効なシーケンスがどこかに組み込まれていることです。です。見える)。
テストしている2つの異なるコンピュータで異なる端末エミュレータを使用しているとします。これはさまざまな動作を説明できます。一部は一部の実装にプライベートであるため、すべてのTEがすべてのエスケープコードを認識するわけではありません。非標準シーケンス(kitty
ラスターイメージ表示プロトコルなど)の固有の動作。
cat
1)コメントに提案されているように、ファイルを-t
出力する前にファイルの内容に対して操作を実行できるいくつかのフラグがあります。詳細についてはを参照してくださいman cat
。
あなたは何ができますか?
時々、ファイルの実際のバイトをチェックしたいと思うかもしれませんし、必要になるかもしれません。このような場合は、端末で安全に印刷できるように、ファイルの各バイトを16進数で表示する16進エディタと呼ばれる特別なソフトウェアを使用する必要があります。
簡単な表示目的でこのプログラムを使用することもできます。このプログラムは、ディストリビューションに応じxxd
て含まれているか、スタンドアロンの場合があります。vim
ほとんどのディストリビューションに含まれているものを使用して、strings
バイナリファイルに存在できるあらゆる種類のテキストを抽出できます。binutils
(ご指摘いただいた@Rui F Ribeiroに感謝)
答え2
pcapファイルはlibpcapライブラリによって生成されます。テキストファイルではありません。ネットワークトラフィックをダンプする特別な生の形式のファイルです。
tcpdump コマンドはこの形式を理解します。
TCP/IP トラフィックのヘッダーを表示するには:
tcpdump -r cap.pcap -n
キャプチャされたトラフィックを表示するには:
tcpdump -r cap.pcap -n -s 1500 -X