로그 추출 쉘 (AWK,정규표현식)
05/13/2018-23:12:27.585699 [**] [1:2240001:2] SURICATA DNS Unsolicited response [**] [Classification: Generic Protocol Command Decode] [Priority: 3] {UDP} 168.126.63.1:53 -> 192.168.233.148:40729
05/13/2018-23:47:39.748349 [**] [1:10001:1] kim rule [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.233.148:35662 -> 112.175.50.171:80
이러한 로그 파일이 있는데 쉘프로그래밍을 하여 awk 정규표현식 같은 것을 활용 해서 파싱하고 싶습니다
1. 05/13/2018-23:12:27 (시간)
2. SURICATA DNS Unsolicited response(룰명)
3. UDP(프로토콜)
4. 168.126.63.1:53(출발지 아이피)
5.192.168.233.148:40729(목적지 아이피)
(위에 1번부터 5번까지는 예를 들은겁니다) 해당하는 부분만 뽑아서 DB 에 저장시키고 싶은데 어떻게 파싱해야할지.... awk '{print $1}' 같은거는 정확히 나오는 것도 있는데 각 로그의 길이 가 틀리다 보니 정규표현식으로 추출해야할것같은데 잘모르겠습니다 ㅠㅠ 도움주시면 정말 감사하겠습니다.
음 ..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
헐 !! 감사합니다 !!!!
혹시 sed -e 's/\[[^]]*\]//g' -e 's/\(^[^ ]*\)\s*\([^{]*\)\(.*$\)/\1 \3 \2/g' | \
while read time proto src dir dst rule; do echo "time=$time proto=$(tr -d '{}' <<< $proto) src=$src dst=$dst rule=$rule"; done 에대해서 설명 한번만 해주실수있나요???.... ㅠㅠ 이해가 잘 안되네요
음 ..
이해가 잘 안 가신다면, 저 명령들을 단계별로 끊어서 실행해 보세요.
중간 중간 결과를 보시면 어떤 순서로 데이터들이 바뀌었는지 이해하는데 도움이 될 겁니다.
먼저 불필요한 데이터를 잘라내고..(다행히 대괄호로 감싸여 있는 애들이 필요없는 애들이네요)
고정된 포맷을 갖도록 메시지를 재배치 하고.. (가변 길이를 가진 rule 을 맨 뒤로 보냈습니다)
그 포맷대로 읽어들여서 각각의 변수에 저장한 겁니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
BEGIN {
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기