iptables 로그가 번호 대신 이름으로 프로토콜을 식별하도록 하려면 어떻게 해야 합니까?

iptables 로그가 번호 대신 이름으로 프로토콜을 식별하도록 하려면 어떻게 해야 합니까?

내 iptables 로그 파일(Ubuntu 16-04)에서 LAN 라우터 및 LAN에 있는 다른 호스트의 IGMP와 관련된 모든 메시지에는 "PROTO=2"가 있습니다. 이것을 변경하고 "PROTO=IGMP"를 얻을 수 있는 방법이 있습니까?

답변1

sed -e "$(awk '/^[[:space:]]*(#|$)/ { next } ;
               { print "s/ PROTO="$2" / PROTO="$3" /;" }' \
          /etc/protocols)" /path/to/iptables.log

이는 파일의 필드 2와 3을 기반으로 스크립트를 구성하는 데 사용됩니다 awk. 그런 다음 에서 스크립트를 실행합니다. 이것은 변환됩니다sed/etc/protocolssed/path/to/iptables.log모두로그 파일의 프로토콜 번호를 해당 이름으로 다시 지정합니다.

원하는 경우 스크립트의 출력을 awk파일에 저장할 수 있습니다(예: 스크립트를 호출 verbose-proto.sed한 다음 실행 sed -f하거나 편집하여 #!/bin/sed -f첫 번째 줄에 추가하고 chmod실행 가능하게 만들 수도 있습니다).

$ awk '/^[[:space:]]*(#|$)/ { next } ;
     { print "s/ PROTO="$2" / PROTO="$3" /;" }' \
    /etc/protocols > ./verbose-proto.sed

$ printf "%s\n" 1 i '#!/bin/sed -f' . w | ed -s verbose-proto.sed
$ chmod +x ./verbose-proto.sed 
$ ./verbose-proto.sed /path/to/iptables.log

2하나의 프로토콜 번호만 으로 변경하려는 경우 IGMP훨씬 간단합니다.

sed -e 's/ PROTO=2 / PROTO=IGMP /' /path/to/iptables.log

( awk스크립트는 정규식 검색 및 대체 규칙을 사용하여 아래와 같이 약 50줄을 생성합니다. 의 모든 알려진 프로토콜에 대해 하나씩 /etc/protocols)

관련 정보