일부 패킷 필터 로그를 분석 중이며 column -t
. 문자열 필드.
내 원본 데이터는 다음과 같은 줄로 구성됩니다.
2018:01:24-09:31:21 asl ulogd[24090]: id="2103" severity="info" sys="SecureNet" sub="ips" name="SYN flood detected" action="SYN flood" fwrule="50018" initf="eth0" srcmac="12:34:56:78:90:ab" dstmac="cd:ef:01:23:45:67" srcip="192.168.1.123" dstip="151.101.65.69" proto="6" length="52" tos="0x00" prec="0x00" ttl="128" srcport="59761" dstport="80" tcpflags="SYN"
다음 방법을 사용하여 데이터를 쉼표로 구분된(CSV) 형식으로 변환합니다.
grep -EHr "192\.168\.1\.123" |
cut -d':' -f2- |
awk -F '"' 'BEGIN{
OFS=",";
print "name","action","srcip","srcport","dstip","dstport","protocol","tcpflags"
}
{
print $10,$12,$22,$36,$24,$38,$26,$(NF-1)
}'
이것은 잘 작동하고 다음과 같은 출력을 생성합니다(IP 주소가 모두 변경되었으며 실제로 이 사이트에 내부 호스트가 넘치지는 않습니다).
name,action,srcip,srcport,dstip,dstport,protocol,tcpflags
SYN flood detected,SYN flood,192.168.1.123,59761,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59764,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59769,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59771,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59772,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,59890,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60002,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60005,151.101.65.69,80,6,SYN
SYN flood detected,SYN flood,192.168.1.123,60006,151.101.65.69,80,6,SYN
어떤 이유로 column
표시 테이블 출력( -t
)을 사용할 때마다 원래 데이터에 줄바꿈이 없는 첫 번째 열 뒤에 줄바꿈이 추가됩니다. 예를 들어:
$ cat mydata.csv | column -s ',' -t
name
action srcip srcport dstip dstport protocol tcpflags
SYN flood detected
SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
예상 출력은 다음과 같습니다.
name action srcip srcport dstip dstport protocol tcpflags
SYN flood detected SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
추가 -x
해도 column
아무런 차이가 없으며 열 수를 지정하지도 않습니다 -c
(터미널의 화면 너비가 충분합니다). 원본 데이터에 개행 문자가 없는데 왜 이렇게 합니까?
awk
BEGIN 블록에서 생성한 헤더 열 에서도 발생하기 때문에 실제로 내 데이터의 문자라고 생각하지 않습니다 .
답변1
첫 번째 쉼표로 구분된 값이 매우 긴 문자열인 CSV 파일에 행을 삽입하면 문제를 재현할 수 있습니다.
name
action srcip srcport dstip dstport protocol tcpflags
SYN flood detected
SYN flood 192.168.1.123 59761 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59764 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59769 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59771 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 59772 151.101.65.69 80 6 SYN
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx SYN flood 192.168.1.123 59890 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60002 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60005 151.101.65.69 80 6 SYN
SYN flood detected
SYN flood 192.168.1.123 60006 151.101.65.69 80 6 SYN
name
실제 출력에서는 와 열 사이에 줄 바꿈이 없지만 action
줄 바꿈(줄이 너무 길어서)은 줄 바꿈 뒤에 들여쓰기가 있는 것처럼 보입니다.
이는 데이터에서 name
값이 매우 긴 항목을 찾아야 함을 의미합니다.