2015-02-28 2 views
1

Будучи большим поклонником изучения основ, прежде чем заниматься более продвинутыми проектами, я задаю этот вопрос со вздохом и потрясением головы ... Мне нравится отслеживать входящие/исходящие соединения в реальном времени (netstat -natuec), но иногда я застрял в том, что я делаю ... Поэтому я хотел бы создать скрипт, который добавит любой ip-адрес NEW, который появляется из команды netstat в txt-файл для дальнейшего просмотра. Я не прошу простого ответа, просто подскажу, где я начну. БЛАГОДАРЯ!Сценарий Bash для добавления вывода netstat в файл?

+0

Мое предложение было бы написать скрипт на вашем языке выбора, что краны в/Proc/нетто/TCP, так как это было бы более чем сценарий дружественный экран выскабливание NetStat. – salparadise

+0

Thats new для меня, спасибо за предложение! –

ответ

1

Не совсем баш, но 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; 

}

+0

Yup that does it ... У меня есть чему поучиться, потому что эта команда для меня китайская ... спасибо! –

+0

Я бы отметил ваш ответ как принятый, так как он делает именно то, что я хочу, но я надеялся, что его направят в правильном направлении, хотя я признаю, что это спасло мне много времени! Спасибо, salparadise! –

+0

Редактирование с пояснениями + модификациями. ожидание. – salparadise

0

1.exec NetStat & получить IP-адрес
2.grep Ip Result.txt
3.Если нет, что ф, написать этот, в противном случае нет.

Вы можете использовать crontab для выполнения сценария.

+0

Я думаю, он хочет найти новые IP-адреса, которые появляются в netstat, он не знал бы, кого он ищет. – salparadise

+0

Да, я бы хотел найти новые ip-адреса, но lemme mess с этой идеей ... спасибо! –

+0

Там вам нужно зацикливать каждый ip на grep result.txt, чтобы убедиться в существовании или нет, а затем решить, записывать ли в result.txt или нет. –