Re: [PATCH] Module for keeping inventory of network listening ports and processes.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 2011-05-01 at 16:46 +0200, Jan-Frode Myklebust wrote:
> Will give an inventory-file on the format:
> 
> 	# addr:port	protocol	command [args]
> 	0.0.0.0:44321	tcp	/usr/libexec/pcp/bin/pmcd
> 	0.0.0.0:51234	tcp	/usr/bin/python /usr/bin/funcd --daemon
> 	:::443	tcp	/usr/sbin/httpd
> 	:::80	tcp	/usr/sbin/httpd
> 	192.168.21.136:22	tcp	/usr/sbin/sshd
> 	0.0.0.0:123	udp	ntpd -u ntp:ntp -p /var/run/ntpd.pid
> 	192.168.21.136:123	udp	ntpd -u ntp:ntp -p /var/run/ntpd.pid
> 	::1:123	udp	ntpd -u ntp:ntp -p /var/run/ntpd.pid
> ---
>  func/minion/modules/portinfo.py |   61 +++++++++++++++++++++++++++++++++++++++
>  1 files changed, 61 insertions(+), 0 deletions(-)
>  create mode 100644 func/minion/modules/portinfo.py
> 
> diff --git a/func/minion/modules/portinfo.py b/func/minion/modules/portinfo.py
> new file mode 100644
> index 0000000..af94364
> --- /dev/null
> +++ b/func/minion/modules/portinfo.py
> @@ -0,0 +1,61 @@
> +#
> +# Copyright 2011
> +# Jan-Frode Myklebust <janfrode@xxxxxxxxx>
> +#
> +# This software may be freely redistributed under the terms of the GNU
> +# general public license.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> +
> +import func_module
> +import sub_process
> +
> +class PortinfoModule(func_module.FuncModule):
> +
> +    version = "0.0.2"
> +    api_version = "0.0.1"
> +    description = "Information on active network ports and processes listening."
> +
> +    def inventory(self):
> +        """
> +        Returns information on all network ports in LISTEN state and the processes listening.
> +        """
> +        flattened = ""
> +        for i in self.listenports():
> +            flattened = flattened + "\t".join(i) + "\n"
> +        return flattened
> +
> +    def listenports(self):
> +        """
> +        Returns the adresses and ports a host is listening on.
> +        """
> +
> +        cmd = sub_process.Popen(["netstat", "-nlp"],shell=False,stdout=sub_process.PIPE,close_fds=True)
> +        data = cmd.communicate()[0]
> +
> +        ports = []
> +        tcpports = []
> +        udpports = []
> +        for line in data.splitlines():
> +              if line.split()[0]=="tcp":
> +		    pid = line.split()[6].split('/')[0]
> +		    cmd = self.cmdline(pid)
> +                    tcpports.append( (line.split()[3], "tcp", cmd) )
> +              elif line.split()[0]=="udp":
> +		    pid = line.split()[5].split('/')[0]
> +		    cmd = self.cmdline(pid)
> +                    udpports.append( (line.split()[3], "udp", cmd) )
> +        tcpports.sort()
> +        udpports.sort()
> +        ports.append( ('# addr:port', 'protocol', 'command [args]') )
> +        ports = ports + tcpports + udpports
> +        return ports
> +
> +    def cmdline(self, pid):
> +        """
> +        Returns the commandline for a given pid as a string.
> +        """
> +        proccmdline = open("/proc/" + pid + "/cmdline").readline().split('\x00')
> +        return " ".join(proccmdline)

Did I commit the wrong version of this?


-sv


_______________________________________________
Func-list mailing list
Func-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/func-list


[Index of Archives]     [Fedora Users]     [Linux Networking]     [Fedora Legacy List]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux