python/psutil/examples/netstat.py

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/python/psutil/examples/netstat.py	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,52 @@
     1.4 +#!/usr/bin/env python
     1.5 +
     1.6 +# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
     1.7 +# Use of this source code is governed by a BSD-style license that can be
     1.8 +# found in the LICENSE file.
     1.9 +
    1.10 +"""
    1.11 +A clone of 'netstat'.
    1.12 +"""
    1.13 +
    1.14 +import socket
    1.15 +from socket import AF_INET, SOCK_STREAM, SOCK_DGRAM
    1.16 +
    1.17 +import psutil
    1.18 +from psutil._compat import print_
    1.19 +
    1.20 +
    1.21 +AD = "-"
    1.22 +AF_INET6 = getattr(socket, 'AF_INET6', object())
    1.23 +proto_map = {(AF_INET, SOCK_STREAM)  : 'tcp',
    1.24 +             (AF_INET6, SOCK_STREAM) : 'tcp6',
    1.25 +             (AF_INET, SOCK_DGRAM)   : 'udp',
    1.26 +             (AF_INET6, SOCK_DGRAM)  : 'udp6'}
    1.27 +
    1.28 +def main():
    1.29 +    templ = "%-5s %-22s %-22s %-13s %-6s %s"
    1.30 +    print_(templ % ("Proto", "Local addr", "Remote addr", "Status", "PID",
    1.31 +                    "Program name"))
    1.32 +    for p in psutil.process_iter():
    1.33 +        name = '?'
    1.34 +        try:
    1.35 +            name = p.name
    1.36 +            cons = p.get_connections(kind='inet')
    1.37 +        except psutil.AccessDenied:
    1.38 +            print_(templ % (AD, AD, AD, AD, p.pid, name))
    1.39 +        except psutil.NoSuchProcess:
    1.40 +            continue
    1.41 +        else:
    1.42 +            for c in cons:
    1.43 +                raddr = ""
    1.44 +                laddr = "%s:%s" % (c.laddr)
    1.45 +                if c.raddr:
    1.46 +                    raddr = "%s:%s" % (c.raddr)
    1.47 +                print_(templ % (proto_map[(c.family, c.type)],
    1.48 +                                laddr,
    1.49 +                                raddr,
    1.50 +                                str(c.status),
    1.51 +                                p.pid,
    1.52 +                                name[:15]))
    1.53 +
    1.54 +if __name__ == '__main__':
    1.55 +    main()

mercurial