我可以关闭不同进程建立的连接吗

2024-09-27 09:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我坚持用程序,它必须显示有关所有本地地址和远程地址的信息,PID,并按需断开确切建立的连接。所以,我想应该是像netscan一样。是否可以在不终止进程的情况下关闭端口(并断开连接)

import os
import socket
import re
from socket import AF_INET, SOCK_STREAM, SOCK_DGRAM
import serial
import psutil as 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(attrs=['pid', 'name']):
        proc_names[p.info['pid']] = p.info['name']

    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],
        ))


def closeConn(ip):
    print("///////////////////////////////////////////////")
    print("Trying to close connection:", ip)
    print("///////////////////////////////////////////////")
    ser = serial.Serial()
    port = re.search(r":\d+", command).group(0)[1:]
    ser.port = port
    ser.close()
    main()


if __name__ == '__main__':
    main()
    while True:
        command = input()
        if command == "quit":
            break
        if re.match(r"close", command):
            connToClose = re.search(r"[^a-z, ]+", command)
            if connToClose:
                closeConn(connToClose.group(0))
            else:
                print("IP or Host cannot be empty... Enter new command. Example >>> close 192.168.0.1")
        else:
            print("Please enter valid command...")

我试图用serial解决这个问题,但据我所知,serial是新的孤立对象,它的close方法对这个对象有影响。那么有没有办法关闭现有的连接呢


Tags: nameimportrecloseifmainserialpid

热门问题