tailf 및 sed를 사용하여 IP 테이블 로그의 하위 문자열만 채우고 보는 방법은 무엇입니까?

tailf 및 sed를 사용하여 IP 테이블 로그의 하위 문자열만 채우고 보는 방법은 무엇입니까?

iptable 로그의 한 줄은 다음과 같습니다.

Jan  1 21:41:19 x kernel: [838760.885218] IPTables-Dropped: IN=eth0 OUT= MAC=x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:00:x:00:00:x:00:x:x:x:x SRC=x.x.x.x DST=x.x.x.x LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=37739 DPT=53 LEN=50 

내가 사용한 라이브 방송을 보려면 다음을 수행하십시오.

tailf /var/log/kern.log

하지만 보시다시피, 여기에는 많은 정보가 포함되어 있습니다. 그래서 해당 행의 소스 및 대상 필드만 살펴보았습니다.

명령을 다음과 같이 변경했습니다.

tailf /var/log/kern.log | sed -n -e 's/^.*DST: //p'

하지만 여전히 아무 것도 없습니다. 소스 및 대상 IP 주소만 표시하도록 변경할 수 있는 방법이 있습니까? 아니면 명령보다 더 복잡한 솔루션을 찾아야 할까요?

답변1

[...] 행의 소스 및 대상 필드만 보시기 바랍니다.

나는 다음과 같은 것을 사용할 것입니다 grep.

echo "Jan  1 21:41:19 x kernel: [838760.885218] IPTables-Dropped: IN=eth0 OUT= MAC=x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:00:x:00:00:x:00:x:x:x:x SRC=192.168.1.10 DST=192.168.1.20 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=37739 DPT=53 LEN=50" | egrep -o 'SRC=[0-9.]* DST=[0-9.]*'
SRC=192.168.1.10 DST=192.168.1.20

귀하의 경우에는 다음과 같습니다:

tailf /var/log/kern.log | egrep -o 'SRC=[0-9.]* DST=[0-9.]*'

답변2

아래 명령으로 존재하는 최대 컬럼을 알아보세요.

awk '{print NF}' /var/log/kern.log/sort -rn | head -1for 루프 max에 해당 값을 할당합니다.

주어진 입력에 따르면 존재하는 최대 열은 22이므로 for 루프에서 22의 값을 할당합니다.

for ((i=1;i<=22;i++)); do tail -f /var/log/kern.log |awk -v i="$i" '$i ~ "SRC" {print $i}';tail -f /var/log/kern.log | awk -v i="$i" '$i ~ "DST" {print $i}'  ; done

output
SRC=x.x.x.x
DST=x.x.x.x

답변3

무엇을 기대했나요? 줄에 DST:.use가 포함되어 있지 않습니다.

sed -n 's/.*\(SRC=.*DST=[^ ]\).*/\1/p'

경기 내 모든 항목 삭제\(\)

관련 정보