python - 使用 Python 让用户登录到网络中的每台计算机
问题描述
我正在寻找一种方法,我可以监控用户是否使用 Python 登录到网络中的某些计算机并将数据返回到单台计算机。理想情况下,我希望能够通过 IP 地址检查每台计算机并查看用户是否登录。计算机有 Windows。
所以我想构建一个这样的函数:
IP_ADDRESS = '123.123.123.123'
check_user(IP_ADDRESS)
输出:用户登录:Ed
或者
输出:登录的用户:N/A
解决方案
以下解决方案效果很好。
如果有人知道使用 python 命令解锁计算机的方法,请告诉我。我从网上的一个人那里得到了这段代码,并根据我的目的对其进行了修改。
如果有人承认,请告诉我,以便我们给予信任。我不记得他的名字了。
这是我的服务器
import socket
import argparse
import threading
import csv
parser = argparse.ArgumentParser(description = "This is the server for the multithreaded socket demo!")
parser.add_argument('--host', metavar = 'host', type = str, nargs = '?', default = socket.gethostname())
parser.add_argument('--port', metavar = 'port', type = int, nargs = '?', default = 9999)
args = parser.parse_args()
print(f"Running the server on: {args.host} and port: {args.port}")
sck = socket.socket()
sck.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
sck.bind((args.host, args.port))
sck.listen(5)
except Exception as e:
raise SystemExit(f"We could not bind the server on host: {args.host} to port: {args.port}, because: {e}")
def on_new_client(client, connection):
ip = connection[0]
port = connection[1]
print(f"THe new connection was made from IP: {ip}, and port: {port}!")
while True:
msg = client.recv(1024)
# with open('aa.csv', 'w', newline='') as csvfile:
# thewriter = csv.writer(csvfile)
# thewriter.writerow([msg.decode(),'computer 2'])
if msg.decode() == 'exit':
break
if msg.decode() == 'lock computer 1':
reply = 'lock'
client.sendall(reply.encode('utf-8'))
elif msg.decode() == 'open computer 1':
reply = 'open'
client.sendall(reply.encode('utf-8'))
# print(f"The client said: {msg.decode()}")
# reply = f"You told me: {msg.decode()}"
# client.sendall(reply.encode('utf-8'))
#print(f"The client from ip: {ip}, and port: {port}, has gracefully diconnected!")
#client.close()
while True:
try:
client, ip = sck.accept()
threading._start_new_thread(on_new_client,(client, ip))
except KeyboardInterrupt:
print(f"Gracefully shutting down the server!")
except Exception as e:
print(f"Well I did not anticipate this: {e}")
sck.close()
这是我的客户
import socket
import argparse
import subprocess
import time
import subprocess
parser = argparse.ArgumentParser(description = "This is the client for the multi threaded socket server!")
parser.add_argument('--host', metavar = 'host', type = str, nargs = '?', default = socket.gethostname())
parser.add_argument('--port', metavar = 'port', type = int, nargs = '?', default = 9999)
args = parser.parse_args()
print(f"Connecting to server: {args.host} on port: {args.port}")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sck:
try:
sck.connect((args.host, args.port))
except Exception as e:
raise SystemExit(f"We have failed to connect to host: {args.host} on port: {args.port}, because: {e}")
while True:
# msg = input("What do we want to send to the server?: ")
time.sleep(2)
# process_name='LogonUI.exe'
# callall='TASKLIST'
# outputall=subprocess.check_output(callall)
# outputstringall=str(outputall)
# if process_name in outputstringall:
# msg = 'Free'
# else:
# msg = 'occupied'
msg = ('lock computer 1')
sck.sendall(msg.encode('utf-8'))
if msg =='exit':
print("Client is saying goodbye!")
break
data = sck.recv(1024)
if data.decode() == 'lock':
print('should I lock the computer?')
process_name='LogonUI.exe'
callall='TASKLIST'
outputall=subprocess.check_output(callall)
outputstringall=str(outputall)
if process_name in outputstringall:
print("Already locked")
else:
print("needs to be locked.")
print(f"The server's response was: {data.decode()}")
推荐阅读
- mysql - 全文检索按查询排序
- vue.js - 在 Vue 组件中定义用户定义的 getter
- c - 插入排序的问题区域
- python - wxpython flexgridSizer 按钮右下角
- python - 在 XML rebot 解析期间设置链接
- java - 在继承的情况下,ArrayList 和 Arrays.asList 对 Collection 的工作方式不同
- asp.net - TLS 1.2 升级
- javascript - getElementsByClassName 上的 Javascript onclick 事件
- julia - 如何轻松绘制背景垂直带?
- java - 使用 iText 的文本和条形码之间的差距