gpt4 book ai didi

linux - 将 netstat 输出附加到文件的 Bash 脚本?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:35 25 4
gpt4 key购买 nike

作为在处理更高级的项目之前学习基础知识的忠实粉丝,我叹了口气并摇了摇头问这个问题......我喜欢实时监控传入/传出连接(netstat -natuec)但有时我陷入了我正在做的事情......所以我想创建一个脚本,将 netstat 命令显示的任何 NEW ip 地址附加到 txt 文件以供稍后查看。我不是要一个简单的答案,只是一个关于我将从哪里开始的线索。谢谢!

最佳答案

不完全是 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;

关于linux - 将 netstat 输出附加到文件的 Bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28779681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com