Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以关闭由不同流程建立的连接吗_Python_Sockets_Networking_Websocket_Connection - Fatal编程技术网

Python 我可以关闭由不同流程建立的连接吗

Python 我可以关闭由不同流程建立的连接吗,python,sockets,networking,websocket,connection,Python,Sockets,Networking,Websocket,Connection,我坚持使用这个程序,它必须显示所有本地地址和远程地址、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(so

我坚持使用这个程序,它必须显示所有本地地址和远程地址、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
方法对这个对象有影响。那么有什么方法可以关闭现有的连接呢?

我不知道有哪种Python库可以关闭与本地端点的任意TCP连接。但是,也有具有此功能的程序-例如,tcpkill(dsniff的一部分)和ss(iproute2的一部分)。您可以使用任何Python库来运行这些子进程。

您的问题从“本地和远程地址”的“连接”开始。然后显示一个转储inet连接并与串行端口交互的程序。串行端口和inet连接之间有什么关系?这个问题让人困惑。@Jean-paulcaldera一个问题是它是从什么开始的。我猜这段代码显示了控制台中显示的数据。所以我想与这些数据交互,我的意思是能够关闭已建立的(如接收数据中声明的)连接。我不能用“psutil”或“serial”来完成。我不知道连续剧是什么,为什么。使用它只是我的假设。@Jean-PaulCalderone作为例子,我得到了“tcp-127.0.0.1:5434-63.156.00.12-firefox”。作为此程序显示的列表中的字符串。我想在不杀死firefox的情况下关闭此连接。至少断开63.156.00.12。完全关闭5434端口