短い答え

短い答え

ファイル(cap.pcap)を生成するPythonスクリプトがあります。猫を猫でつかむと永遠に付いています(何も表示されません)。私は実行しようとしています:

  1. コマンドファイルhdとvi。彼らはうまくいきます。
  2. lsofとfusionerは何も表示しません。
  3. cpを別のファイルに移動し、後者をキャットします。ついています。
  4. 他のファイルにddしても結果は同じです。
  5. < base64 cap.pcap > b64; < base64 -d b64 > cap2.pcap; cat cap2.pcap;また詰まっていますね。
  6. テストのために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

短い答え

  1. catほとんどいつも彼のせいではないと思うかもしれません。そのように大きくて明白なバグを持つことは、あまりにも一般的で、よくテストされており、単純です。
  2. cat端末にバイナリファイルのみを送信しないでください。端末は、任意のバイナリデータではなくテキストを表示するように設計されています。

長い答え

停止したのはプロセス自体ではなく、ウィンドウを表示するcatプログラムである端末エミュレータです。catファイル自体の実際の内容は気にせず、ファイルのすべての内容を標準出力1にコピーするだけです。 (理論的には)可能で、cat /dev/sdaハードドライブ全体の内容を端末に幸せにダンプします。

しかし、端末エミュレータは、任意のバイナリデータを表示するように設計されていません。これは、テキストを表示するために使用され、制御コードと呼ばれる印刷できない文字の特殊シーケンスを挿入することによって変更できます。脱出コード、ほとんどは "エスケープ文字"(\x1B、一般的に で表される^[)で始まるからです。

バイナリデータを端末にダンプすると、エスケープ文字(またはそれに関連する他の文字)が表示され、エスケープコードを解釈しようとすることができます。つまり、少なくとも実際に有効なシーケンスを形成していることを確認できるまでは、次の文字は表示されません。もう1つの可能性は、端末を消去したり(何も印刷されていないように見せたり)、前景色を変更したり(すべての後続の出力に何も印刷しないようにするなど)、特別な動作をトリガーする有効なシーケンスがどこかに組み込まれていることです。です。見える)。

テストしている2つの異なるコンピュータで異なる端末エミュレータを使用しているとします。これはさまざまな動作を説明できます。一部は一部の実装にプライベートであるため、すべてのTEがすべてのエスケープコードを認識するわけではありません。非標準シーケンス(kittyラスターイメージ表示プロトコルなど)の固有の動作。

cat1)コメントに提案されているように、ファイルを-t出力する前にファイルの内容に対して操作を実行できるいくつかのフラグがあります。詳細についてはを参照してくださいman cat

あなたは何ができますか?

時々、ファイルの実際のバイトをチェックしたいと思うかもしれませんし、必要になるかもしれません。このような場合は、端末で安全に印刷できるように、ファイルの各バイトを16進数で表示する16進エディタと呼ばれる特別なソフトウェアを使用する必要があります。

簡単な表示目的でこのプログラムを使用することもできます。このプログラムは、ディストリビューションに応じxxdて含まれているか、スタンドアロンの場合があります。vim

ほとんどのディストリビューションに含まれているものを使用して、stringsバイナリファイルに存在できるあらゆる種類のテキストを抽出できます。binutils(ご指摘いただいた@Rui F Ribeiroに感謝)

おすすめ記事