1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/env python
- # Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """
- A clone of 'netstat -antp' on Linux.
- $ python examples/netstat.py
- Proto Local address Remote address Status PID Program name
- tcp 127.0.0.1:48256 127.0.0.1:45884 ESTABLISHED 13646 chrome
- tcp 127.0.0.1:47073 127.0.0.1:45884 ESTABLISHED 13646 chrome
- tcp 127.0.0.1:47072 127.0.0.1:45884 ESTABLISHED 13646 chrome
- tcp 127.0.0.1:45884 - LISTEN 13651 GoogleTalkPlugi
- tcp 127.0.0.1:60948 - LISTEN 13651 GoogleTalkPlugi
- tcp 172.17.42.1:49102 127.0.0.1:19305 CLOSE_WAIT 13651 GoogleTalkPlugi
- tcp 172.17.42.1:55797 127.0.0.1:443 CLOSE_WAIT 13651 GoogleTalkPlugi
- ...
- """
- import socket
- from socket import AF_INET, SOCK_STREAM, SOCK_DGRAM
- import psutil
- AD = "-"
- AF_INET6 = getattr(socket, 'AF_INET6', object())
- proto_map = {
- (AF_INET, SOCK_STREAM): 'tcp',
- (AF_INET6, SOCK_STREAM): 'tcp6',
- (AF_INET, SOCK_DGRAM): 'udp',
- (AF_INET6, SOCK_DGRAM): 'udp6',
- }
- def main():
- templ = "%-5s %-30s %-30s %-13s %-6s %s"
- print(templ % (
- "Proto", "Local address", "Remote address", "Status", "PID",
- "Program name"))
- proc_names = {}
- for p in psutil.process_iter():
- try:
- proc_names[p.pid] = p.name()
- except psutil.Error:
- pass
- for c in psutil.net_connections(kind='inet'):
- laddr = "%s:%s" % (c.laddr)
- raddr = ""
- if c.raddr:
- raddr = "%s:%s" % (c.raddr)
- print(templ % (
- proto_map[(c.family, c.type)],
- laddr,
- raddr or AD,
- c.status,
- c.pid or AD,
- proc_names.get(c.pid, '?')[:15],
- ))
- if __name__ == '__main__':
- main()
|