내 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/protocols
sed
/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
)