1

これが可能かどうかはわかりませんが、正規表現を使用して16進数の電子メールアドレスを取得することを検討しています。基本的に、これは自動フォレンジックツールのいくつかを構築することですが、適切な正規表現アルゴリズムの作成に問題があります。

メールの正規表現:/^([a-z0-9_.-]+)@([\da-z.-]+).([az.]{2,6})$/

16進値:

@ = 40
. = 2E
.com = 636f6d
_ = 5f
A/a = 41/61 [1]
Z/z = 5a/7a
- = 2d

これは私が現時点で得ているものです(小文字と.comのみが考慮されます)。しかし、それは機能しません!簡単なことを台無しにしたことがありますか?

"/^([61-7a]+)40([61-7a]+)23(636f6d)$/"

[1]メールは小文字しか使用できないことは知っていますが、大文字も考慮する必要があります。

4

5 に答える 5

1

あなたは問題に間違って取り組んでいると思います。標準のhex-charと同等のものを使用していると仮定すると、最初に電子メールを16進から変換してから、電子メールの正規表現を使用する必要があります。chr(int('piece, 16))これは、電子メールを一度に2文字ずつ処理し、各部分で使用するだけで実行できます。

于 2012-11-02T22:46:27.670 に答える
1

クラスを定義する

@ = 40
. = 2E
com = 636f6d
_ = 5f
a-z = (4[1-9a-f]|5[0-9a])
A-Z = (6[1-9a-f]|7[0-9a])
- = 2d

正規表現に置き換えます

/^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/

/^(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|[0-9]|5f|2E|2d)+)40(([0-9]|(4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])|2E|2d)+)2E(((4[1-9a-f]|5[0-9a])|(6[1-9a-f]|7[0-9a])){2,6})$/

に分解...

/^
(
    (
        (4[1-9a-f]|5[0-9a])     // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
        |[0-9]                  // 0-9
        |5f                     // _
        |2E                     // .
        |2d                     // -
    )+ // 1 or more times
) 
40
(
    (
        [0-9]                   // 0-9
        |(4[1-9a-f]|5[0-9a])    // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
        |2E                     // .
        |2d                     // -
    )+ // 1 or more times
)
2E                              // .
(
    (
        (4[1-9a-f]|5[0-9a])     // a-z
        |(6[1-9a-f]|7[0-9a])    // A-Z
    ){2,6} // between 2 and 6 times
)$/
于 2012-11-02T22:49:59.843 に答える
0

Pythonの正規表現のドキュメント(http://docs.python.org/2/library/re.html)を確認する必要があると思います。

たとえば、[61-7a]は、6、1-7、またはaのいずれかに一致します。

于 2012-11-02T22:50:11.480 に答える
0

達成しようとしていることから少し離れていますが、ドライブを解析して電子メールアドレスを切り出し、人気順にリストするBulkExtractorを見てください。

于 2012-11-03T19:32:18.877 に答える
0

この質問はすでに回答されているので、どこにもコメントを投稿することはできませんが、これは言う必要があると思います。

あなたが取っているアプローチは、実際には個々の文字を同等のASCIIに変換するよりも悪いです。実際には、各バイトを2つのASCII文字に変換しています。

最終/作業パターンとして投稿したREGEXパターンの一部を参照するだけです。chars4[0-9a-fA-F] を検索しようとしています@ABCDEFGHIJKLMNO。大文字または小文字で格納されている16進コードを説明しようとしているためa-f ですA-Fハードドライブ上の16進コードは、大文字または小文字で保存されません(16進コードでさえ保存されません)。あなたは、ASCIIでこのデータをあなたに提示しているどんなツールでも説明しています。

このデータにアクセスするためにどのツールを使用していますか?

Pythonを使用してddイメージファイルを読み取る場合は、生データの後に続く正規表現を使用する必要があります。それは[\x40-\x4f]上記を複製するようなものになります。[@-O]同じことを達成するので、これはすべて不要です。

これをどのようにテストしているかは正確にはわかりませんが、16進コードをオンラインのREGEXテストエンジンに貼り付けていると思われます。そのテストエンジンは、これらの16進コードを、バイトからのニブルのペアとしてではなく、2つの個別の文字として解釈します。

于 2012-11-03T23:13:32.420 に答える