Будучи большим поклонником изучения основ, прежде чем заниматься более продвинутыми проектами, я задаю этот вопрос со вздохом и потрясением головы ... Мне нравится отслеживать входящие/исходящие соединения в реальном времени (netstat -natuec), но иногда я застрял в том, что я делаю ... Поэтому я хотел бы создать скрипт, который добавит любой ip-адрес NEW, который появляется из команды netstat в txt-файл для дальнейшего просмотра. Я не прошу простого ответа, просто подскажу, где я начну. БЛАГОДАРЯ!Сценарий Bash для добавления вывода netstat в файл?
ответ
Не совсем баш, но 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;
}
функция для преобразования шестнадцатеричной в внутрибрюшинно
sub hex_to_ip {my $i = shift; inet_ntoa(pack("N", hex($i)))}
возвращает все удаленные адреса, найденные в "/Proc/нетто/ТСР»
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 не заполняется с первой попытки, он будет записывать все адреса в первом цикле) и спит в течение двух секунд.
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;
}
Yup that does it ... У меня есть чему поучиться, потому что эта команда для меня китайская ... спасибо! –
Я бы отметил ваш ответ как принятый, так как он делает именно то, что я хочу, но я надеялся, что его направят в правильном направлении, хотя я признаю, что это спасло мне много времени! Спасибо, salparadise! –
Редактирование с пояснениями + модификациями. ожидание. – salparadise
1.exec NetStat & получить IP-адрес
2.grep Ip Result.txt
3.Если нет, что ф, написать этот, в противном случае нет.
Вы можете использовать crontab для выполнения сценария.
Я думаю, он хочет найти новые IP-адреса, которые появляются в netstat, он не знал бы, кого он ищет. – salparadise
Да, я бы хотел найти новые ip-адреса, но lemme mess с этой идеей ... спасибо! –
Там вам нужно зацикливать каждый ip на grep result.txt, чтобы убедиться в существовании или нет, а затем решить, записывать ли в result.txt или нет. –
Мое предложение было бы написать скрипт на вашем языке выбора, что краны в/Proc/нетто/TCP, так как это было бы более чем сценарий дружественный экран выскабливание NetStat. – salparadise
Thats new для меня, спасибо за предложение! –