Будучи большим поклонником изучения основ перед тем, как приступить к более сложным проектам, я задаю этот вопрос со вздохом и покачивая головой ... Мне нравится контролировать входящие / исходящие соединения в реальном времени (netstat -natuec), но иногда меня ловят в том, что я делаю ... Итак, я хотел бы создать сценарий, который добавлял бы любой НОВЫЙ IP-адрес, который появляется из команды netstat, в текстовый файл для просмотра позже. Я не прошу простого ответа, просто подсказку, с чего бы я начал. БЛАГОДАРНОСТЬ!
2 ответа
Не совсем bash, но perl, но он делает то, что вы хотите, вот весь сценарий:
use warnings;
use strict;
use Socket;
use feature 'say';
sub hex_to_ip {my $i = shift; inet_ntoa( pack( "N", hex( $i ) ) )}
sub addresses {open(my $net,"<","/proc/net/tcp"); my %add;while(<$net>) {my $r = (split " ",$_)[2];$r =~ s/(rem.*|:.*)//; $add{hex_to_ip($r)}++}; return %add};
my %old;
while(1) {
open(my $new_file,">>","/tmp/new_connections.txt");
my %fresh = &addresses;
for my $f(keys %fresh) {
my $current_time = localtime;
say $new_file "$f $current_time\n" unless exists $old{$f};
}
close $new_file;
say "!!"; %old = %fresh; sleep 2;
}
Функция для преобразования шестнадцатеричного в ip
sub hex_to_ip {my $i = shift; inet_ntoa( pack( "N", hex( $i ) ) )}
Возвращает все удаленные адреса, найденные в "/ proc / net / tcp"
sub addresses {open(my $net,"<","/proc/net/tcp");
my %add;while(<$net>) {my $r = (split " ",$_)[2];
$r =~ s/(rem.*|:.*)//; $add{hex_to_ip($r)}++}; return %add
}
Открывает файл для добавления (не затирает то, что в нем)
open(my $new_file,">>","/tmp/new_connections.txt");
Работает всю жизнь программы
while(1)
Получает новую копию текущих адресов и, если в $ old их нет, записывает в файл с отметкой времени. (Поскольку $ old не заполняется с первой попытки, он запишет все адреса в первом цикле) и спит в течение двух секунд.
my %fresh = &addresses;
for my $f(keys %fresh) {
my $current_time = localtime;
say $new_file "$f $current_time" unless exists $old{$f};
}
say "!!"; %old = %fresh; sleep 2;
}
1.exec netstat и получите IP-адрес
2.grep ip result.txt
3. если этого ip нет, напишите этот, иначе нет.
Вы можете crontab выполнить свой скрипт.
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.