psutil

Форк
0
/
netstat.py 
71 строка · 2.0 Кб
1
#!/usr/bin/env python3
2

3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
4
# Use of this source code is governed by a BSD-style license that can be
5
# found in the LICENSE file.
6

7
"""A clone of 'netstat -antp' on Linux.
8

9
$ python3 scripts/netstat.py
10
Proto Local address      Remote address   Status        PID    Program name
11
tcp   127.0.0.1:48256    127.0.0.1:45884  ESTABLISHED   13646  chrome
12
tcp   127.0.0.1:47073    127.0.0.1:45884  ESTABLISHED   13646  chrome
13
tcp   127.0.0.1:47072    127.0.0.1:45884  ESTABLISHED   13646  chrome
14
tcp   127.0.0.1:45884    -                LISTEN        13651  GoogleTalkPlugi
15
tcp   127.0.0.1:60948    -                LISTEN        13651  GoogleTalkPlugi
16
tcp   172.17.42.1:49102  127.0.0.1:19305  CLOSE_WAIT    13651  GoogleTalkPlugi
17
tcp   172.17.42.1:55797  127.0.0.1:443    CLOSE_WAIT    13651  GoogleTalkPlugi
18
...
19
"""
20

21
import socket
22
from socket import AF_INET
23
from socket import SOCK_DGRAM
24
from socket import SOCK_STREAM
25

26
import psutil
27

28

29
AD = "-"
30
AF_INET6 = getattr(socket, 'AF_INET6', object())
31
proto_map = {
32
    (AF_INET, SOCK_STREAM): 'tcp',
33
    (AF_INET6, SOCK_STREAM): 'tcp6',
34
    (AF_INET, SOCK_DGRAM): 'udp',
35
    (AF_INET6, SOCK_DGRAM): 'udp6',
36
}
37

38

39
def main():
40
    templ = "%-5s %-30s %-30s %-13s %-6s %s"
41
    header = templ % (
42
        "Proto",
43
        "Local address",
44
        "Remote address",
45
        "Status",
46
        "PID",
47
        "Program name",
48
    )
49
    print(header)
50
    proc_names = {}
51
    for p in psutil.process_iter(['pid', 'name']):
52
        proc_names[p.info['pid']] = p.info['name']
53
    for c in psutil.net_connections(kind='inet'):
54
        laddr = "%s:%s" % (c.laddr)
55
        raddr = ""
56
        if c.raddr:
57
            raddr = "%s:%s" % (c.raddr)
58
        name = proc_names.get(c.pid, '?') or ''
59
        line = templ % (
60
            proto_map[(c.family, c.type)],
61
            laddr,
62
            raddr or AD,
63
            c.status,
64
            c.pid or AD,
65
            name[:15],
66
        )
67
        print(line)
68

69

70
if __name__ == '__main__':
71
    main()
72

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.