私は時間とフォルダ名として入力を受け取るスクリプトに取り組んでいます。ユーザーが入力した時間範囲内にあるファイル (snort.log.*) を見つける必要があります (ユーザーはアラート ファイルの太字のタイムスタンプを確認し、実際の snort.log.** ファイルにその時間を入力します。これには攻撃の詳細が含まれており、アラート ファイルにはメタデータのみが含まれています)。ここにディレクトリ サンプルがあります。
[jump1@widids01 snort-3]# ls -ltr | 末尾 -6 -rwxr-x--- 1 snort snort 301731 2月2日 18:18 snort.log.1517557015 -rwxr-x--- 1 snort snort 5720853 2月5日 21:11 snort.log.1517563475 -rwxr-x--- 1 snort snort 3566073 2月7日 16:00 snort.log.1517832965 -rwxr-x--- 1 snort snort 18999 2月 7日 20:46 snort.log.1518003111 -rwxr-x--- 1 snort snort 20705098 2月15日 19:00 snort.log.1518004113 -rw------- 1 snort snort 357271 2月15日 22:22 snort.log.1518688923 -rwxr-x--- 1 snort snort 50782147 2月15日 22:22 アラート [jump1@widids01 snort-3]# テール -3 アラート 02/15-18:22:02.204655 [1:2403380:38412] ET CINS アクティブ脅威インテリジェンス 評判の悪い IP TCP グループ 41 [分類: その他の攻撃] [優先度: 2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS アクティブ脅威インテリジェンス 評判の悪い IP TCP グループ 55 [分類: その他の攻撃] [優先度: 2] {TCP} 02/15-22:22:03.335107 [1:2403408:38412] ET CINS アクティブ脅威インテリジェンス 評判の悪い IP TCP グループ 55 [分類: その他の攻撃] [優先度: 2] {TCP}
ここで問題に直面しています。つまり、snort.log.[epoch]
ファイル[epoch]
が生成された時間なので、ユーザーが入力すると
テストケース1:
time:2015-02-15-22:28:02
snort.log.file
攻撃データに含まれる場所を彼に伝える方法
テストケース2:
time:2015-02-15-18:22:02
snort.log.file
攻撃データに含まれる場所を彼に伝える方法
試してみましたが、find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"
適切な出力が得られませんでした。
答え1
次のような入力があると仮定します。
time="time:2015-02-15-18:22:02"
次に、それを Unix タイムスタンプ (エポックからの秒数) に変換し、timestamp
次のように変数に保存します。
time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)
ここでプレフィックスsed
を削除しtime:
、日付と時刻の間のコロンをT
(に変更します。8601 規格)は、date
タイムスタンプをエポックからの秒数に変換するために使用されます。
find
このタイムスタンプが何を表しているかに応じて、ログのファイル名を出力するために使用できます。
ファイル名にすでにタイムスタンプが含まれている場合は、
snort.log.$time
直接ファイルの変更時刻の場合:
find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
これにより、変更時刻が
time
-1 秒から までのすべてのログ ファイルが検索されますtime
。指定されたタイムスタンプ以降の最も古いログ ファイルを見つける必要がある場合は、 および
sort
を使用できますhead
。find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
ログファイルを見つける必要がある場合(何らかの方法で)含む指定されたタイムスタンプを使用するには、以下を使用します
grep
。grep -l $time *
長いログ ファイルが多数ある場合は、これを
find
and/orと組み合わせてparallel
高速化することができます。例:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +