在处理更高级的项目之前成为学习基础知识的忠实粉丝,我叹了口气,摇摇头问我这个问题...我喜欢实时监控传入/传出连接(netstat -natuec)但有时候我陷入了正在做的事情......所以我想创建一个脚本,将任何 NEW ip地址从netstat命令添加到txt文件以供日后查看。我不是要求一个简单的答案,只是一个线索,我将从哪里开始。谢谢!
答案 0 :(得分:1)
不是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 :(得分:0)
1.exec netstat&amp;获取IP地址
2.grep ip result.txt
3.如果没有ip,请写下这个,否则不要。
你可以用crontab来执行你的脚本。