我坚持用程序,它必须显示有关所有本地地址和远程地址的信息,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的库来运行这些子进程
相关问题 更多 >
编程相关推荐