tcpdump
라이브 피드에서 IP를 정렬하고 격리 하고 싶습니다 .
tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}
잘 작동하지만 프로그램을 추가하려고 하면 uniq
실패합니다.
tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | uniq -u
아무것도 반환하지 않습니다.
와 동일합니다 sort -u
.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
답변1
이론적인 문제가 있습니다. sort
모든 입력이 처리될 때까지 아무 것도 인쇄할 수 없습니다. uniq
중복된 줄만 압착되므로(그래서 앞에 오는 경우가 많습니다 sort
) 입력에 동일한 줄이 두 번 연속으로 있는 경우에만 출력이 입력과 다릅니다. 입력이 다소 무작위라면 아마도 차이를 느끼지 못할 것입니다.
가장 좋은 방법은 입력을 한 줄씩 읽고 그것이 표시되었는지 확인하는 간단한 Perl 프로그램입니다. 그렇지 않은 경우 입력을 인쇄하고 본 입력의 해시 테이블에 추가합니다.
#!/usr/bin/perl
my %LINES ;
while (<STDIN>) {
if (! $LINES{$_}) {
$LINES{$_} = 1 ;
print $_ ;
}
}
물론 이미 본 줄의 목록도 늘어나고 프로그램이 차지하는 메모리도 늘어납니다.
나는 당신이 그것으로 무엇을 할 것인지 잘 모르겠지만 현재 날짜를 인쇄에 추가하고 나중에 입력을 제거할 수 있도록 해시에 추가할 것이라고 생각합니다.N시간.