Bro 로그를 확인하고 있으며 AWK를 사용하여 추적기에서 IP를 얻는 방법을 찾고 있습니다.협회그리고 Bro 로그에서 이러한 IP를 자동으로 검색하고 각 일치 결과를 [custom-name].txt
파일로 인쇄합니다.
추가 정보:
나는 awk를 처음 접했지만 여러 가지를 하나로 묶으려고 노력하고 있습니다. 이 작업을 수행하는 더 좋은 방법이 있다면 awk에 감사하지 않을 것입니다. 효율적이면 좋을 것 같습니다.
이제 Excel 함수를 사용하여 잘못된 IP 열(링크에서 정기적으로 업데이트됨)을 매우 긴 awk OR 문자열로 수동으로 연결합니다.
cat http* | awk '/123\.456\.789\.012/ || /2nd IP/ || /3rd IP/' | sort -n > file.txt
현재 http.log에는 일반적인 Bro 헤더가 있습니다... TS UID ID.orig_h ID.orig_p 등.
평신도의 관점에서 내가하고 싶은 일은 다음과 같습니다.
라인 1의 IP인 경우협회http.log에서 발견되면 line_1_ip.txt에 결과를 인쇄합니다. IP 연결 line 2가 http.log에서 발견되면 결과를 line_2_ip.txt에 인쇄합니다.
IP 조각은 다음과 같습니다.
#############################################################################################
# abuse.ch ZeuS IP blocklist "BadIPs" (excluding hijacked sites and free hosting providers) #
# #
# For questions please refer to https://zeustracker.abuse.ch/blocklist.php #
#############################################################################################
103.230.84.239
103.241.0.100
103.26.128.84
103.4.52.150
103.7.59.135
104.218.48.99
104.219.232.12
104.236.55.19
107.150.58.84
108.61.193.211
그냥 텍스트 파일이에요.
실제로 IP를 추출하기 위해 원격 웹페이지를 참조할 때 어디서부터 시작해야 할지 모르겠습니다. 그러나 로컬 텍스트 파일에서 추출할 수 있다면 작업을 위한 출발점이 될 것입니다.
답변1
입력 형식을 본 적이 없기 때문에 구문 분석하려는 내용이 무엇인지 잘 모르겠지만 IP 목록을 읽고 해당 출력 파일로 인쇄하려는 경우 다음을 시도해 볼 수 있습니다.
awk 'NR==FNR{a[$1]=NR; next} {
for(ip in a){
if($0~ip){
print >> "line_"a[ip]"_ip.txt"
}
}
}}' <(wget -O - "https://zeustracker.abuse.ch/blocklist.php?download=badips" 2>/dev/null |
grep -Ev "#|^ *$") http.log
하지만 좀 복잡하므로 간단히 풀어보겠습니다.
wget -O - https://zeustracker.abuse.ch/blocklist.php?download=badips 2>/dev/null | grep -Ev "#|^ *$"
: IP 목록을 다운로드하고, 포함된 줄#
이나 빈 줄을 제거하고 표준 출력으로 인쇄합니다.<(command)
: 이것은 ... 불리운다프로세스 교체이는 프로세스의 출력을 다른 명령의 입력 파일로 처리할 수 있도록 하는 일부 쉘(bash, zsh 및 ksh 등)의 트릭입니다.- 따라서 조각에는 두 개의 "파일"이 표시됩니다. 첫 번째는
awk
명령 파이프의 출력이고 두 번째는 파일입니다.wget
grep
http.log
NR==FNR{a[$1]=NR; next}
: NR은 현재 입력 라인 번호이며FNR
동일하지만 다릅니다.현재 파일. 둘은 첫 번째 파일을 읽을 때만 동일합니다. 따라서a
키가 IP이고 값이 현재 행 번호인 배열이 생성됩니다.for(ip in a)
: 배열을 반복하여a
각 키(IP)를ip
.if($0~ip){}
: 이 줄($0
)이 이것과 일치하는 경우ip
.print >> "line_"a[ip]"_ip.txt"
line_
: 해당 IP에 대한 입력 줄 번호를 표시하는 파일에 줄을 인쇄합니다_ip.txt
. 이렇게>>
하면 파일이 추가되고 덮어쓰이지 않게 됩니다.
답변2
로그 파일에서 데이터를 bro
추출합니다 .bro-cut
다음을 수행할 수 있습니다.
bro-cut id.orig_h id.resp_h < conn.log | grep -wFf <(
curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips' |
grep '^[^#]'
)
그리고 awk
:
awk '
NR == FNR {
if (/^[^#]/) bad[$0]=""
next
}
($1 in bad) || ($2 in bad)
' <(curl 'https://zeustracker.abuse.ch/blocklist.php?download=badips') \
<(bro-cut id.orig_h id.resp_h < conn.log)
(루프에서 힘든 문자열 일치를 수행하는 대신 해시 테이블을 사용하는 것이 더 효율적입니다.)
또한 새로운 위협 규칙 세트에는 이러한 Zeus 추적기 목록(및 기타 목록)을 추적하는 규칙이 있습니다. 따라서 bro-ids 외에 해당 규칙 세트와 함께 snort/surricata를 사용하는 경우 bro를 사용하여 수행하는 것은 결국 중복되게 됩니다.