mirror of
https://github.com/webmin/webmin.git
synced 2026-05-17 12:20:23 +01:00
Merge branch 'master' of github.com:webmin/webmin
This commit is contained in:
146
proc/proc-lib.pl
146
proc/proc-lib.pl
@@ -376,13 +376,15 @@ $has_lsof_command = &has_command("lsof");
|
||||
sub find_socket_processes
|
||||
{
|
||||
local @rv;
|
||||
open(LSOF, "lsof -i '$_[0]:$_[1]' |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)/) {
|
||||
push(@rv, $2);
|
||||
if ($has_lsof_command) {
|
||||
open(LSOF, "$has_lsof_command -i ".quotemeta("$_[0]:$_[1]")." |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)/) {
|
||||
push(@rv, $2);
|
||||
}
|
||||
}
|
||||
close(LSOF);
|
||||
}
|
||||
close(LSOF);
|
||||
return @rv;
|
||||
}
|
||||
|
||||
@@ -391,76 +393,106 @@ return @rv;
|
||||
sub find_ip_processes
|
||||
{
|
||||
local @rv;
|
||||
open(LSOF, "lsof -i '\@$_[0]' |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)/) {
|
||||
push(@rv, $2);
|
||||
if ($has_lsof_command) {
|
||||
open(LSOF, "$has_lsof_command -i ".quotemeta("\@$_[0]")." |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)/) {
|
||||
push(@rv, $2);
|
||||
}
|
||||
}
|
||||
close(LSOF);
|
||||
}
|
||||
close(LSOF);
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# find_all_process_sockets()
|
||||
# Returns all network connections made by any process
|
||||
sub find_all_process_sockets
|
||||
{
|
||||
local @rv;
|
||||
if ($has_lsof_command) {
|
||||
open(LSOF, "$has_lsof_command -i tcp -i udp -n |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+).*(TCP|UDP)\s+(.*)/) {
|
||||
local $n = { 'pid' => $2,
|
||||
'fd' => $4,
|
||||
'type' => $5,
|
||||
'proto' => $7 };
|
||||
local $m = $8;
|
||||
if ($m =~ /^([^:\s]+):([^:\s]+)\s+\(listen\)/i) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
$n->{'listen'} = 1;
|
||||
}
|
||||
elsif ($m =~ /^([^:\s]+):([^:\s]+)->([^:\s]+):([^:\s]+)\s+\((\S+)\)/) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
$n->{'rhost'} = $3;
|
||||
$n->{'rport'} = $4;
|
||||
$n->{'state'} = $5;
|
||||
}
|
||||
elsif ($m =~ /^([^:\s]+):([^:\s]+)/) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
}
|
||||
push(@rv, $n);
|
||||
}
|
||||
}
|
||||
close(LSOF);
|
||||
}
|
||||
return @rv;
|
||||
|
||||
}
|
||||
|
||||
# find_process_sockets(pid)
|
||||
# Returns all network connections made by some process
|
||||
sub find_process_sockets
|
||||
{
|
||||
local @rv;
|
||||
open(LSOF, "lsof -i tcp -i udp -n |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+).*(TCP|UDP)\s+(.*)/
|
||||
&& $2 eq $_[0]) {
|
||||
local $n = { 'fd' => $4,
|
||||
'type' => $5,
|
||||
'proto' => $7 };
|
||||
local $m = $8;
|
||||
if ($m =~ /^([^:\s]+):([^:\s]+)\s+\(listen\)/i) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
$n->{'listen'} = 1;
|
||||
}
|
||||
elsif ($m =~ /^([^:\s]+):([^:\s]+)->([^:\s]+):([^:\s]+)\s+\((\S+)\)/) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
$n->{'rhost'} = $3;
|
||||
$n->{'rport'} = $4;
|
||||
$n->{'state'} = $5;
|
||||
}
|
||||
elsif ($m =~ /^([^:\s]+):([^:\s]+)/) {
|
||||
$n->{'lhost'} = $1;
|
||||
$n->{'lport'} = $2;
|
||||
}
|
||||
push(@rv, $n);
|
||||
}
|
||||
}
|
||||
close(LSOF);
|
||||
return @rv;
|
||||
my ($pid) = @_;
|
||||
return grep { $_->{'pid'} == $pid } &find_all_process_sockets();
|
||||
}
|
||||
|
||||
# find_process_files(pid)
|
||||
# find_all_process_files()
|
||||
# Returns all files currently held open by all processes
|
||||
sub find_all_process_files
|
||||
{
|
||||
return &find_process_files();
|
||||
}
|
||||
|
||||
# find_process_files([pid])
|
||||
# Returns all files currently held open by some process
|
||||
sub find_process_files
|
||||
{
|
||||
local ($pid) = @_;
|
||||
local @rv;
|
||||
open(LSOF, "lsof -p '$_[0]' |");
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+),(\d+)\s+(\d+)\s+(\d+)\s+(.*)/) {
|
||||
push(@rv, { 'fd' => lc($4),
|
||||
'type' => lc($5),
|
||||
'device' => [ $6, $7 ],
|
||||
'size' => $8,
|
||||
'inode' => $9,
|
||||
'file' => $10 });
|
||||
if ($has_lsof_command) {
|
||||
if (defined($pid)) {
|
||||
open(LSOF, "$has_lsof_command -p ".quotemeta($pid)." |");
|
||||
}
|
||||
elsif (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+),(\d+)\s+(\d+)\s+(.*)/) {
|
||||
push(@rv, { 'fd' => lc($4),
|
||||
'type' => lc($5),
|
||||
'device' => [ $6, $7 ],
|
||||
'inode' => $8,
|
||||
'file' => $9 });
|
||||
else {
|
||||
open(LSOF, "$has_lsof_command |");
|
||||
}
|
||||
while(<LSOF>) {
|
||||
if (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+),(\d+)\s+(\d+)\s+(\d+)\s+(.*)/) {
|
||||
push(@rv, { 'pid' => $2,
|
||||
'fd' => lc($4),
|
||||
'type' => lc($5),
|
||||
'device' => [ $6, $7 ],
|
||||
'size' => $8,
|
||||
'inode' => $9,
|
||||
'file' => $10 });
|
||||
}
|
||||
elsif (/^(\S+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+),(\d+)\s+(\d+)\s+(.*)/) {
|
||||
push(@rv, { 'pid' => $2,
|
||||
'fd' => lc($4),
|
||||
'type' => lc($5),
|
||||
'device' => [ $6, $7 ],
|
||||
'inode' => $8,
|
||||
'file' => $9 });
|
||||
}
|
||||
}
|
||||
close(LSOF);
|
||||
}
|
||||
close(LSOF);
|
||||
return @rv;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user