我想监控SMB连接,我已经编写了下面的代码,但我担心我可能会占用网络。
以这种方式重复打开和关闭连接是否可以?
import socket
import time
import threading
class SMBConnectionMonitor(threading.Thread):
def __init__(self, host, poll_period=60, timeout=5):
super(SMBConnectionMonitor, self).__init__()
self.host = host
self.poll_period = poll_period
self.timeout = timeout
self.connected = False
self.stop_requested = False
def stop(self):
self.stop_requested = True
def run(self):
while not self.stop_requested:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(self.timeout)
try:
sock.connect((self.host, 445))
# successful, if this is the first time update the status
if not self.connected:
self.connected = True
except socket.error as e:
# can't connect, if this is first time update the status
if self.connected:
self.connected = False
sock.close()
# wait for the poll period before trying another connection
for i in range(self.poll_period):
if self.stop_requested: return
time.sleep(1)
monitor = SMBConnectionMonitor("remote-computer", poll_period=10)
monitor.start()
monitor.join(timeout=30)
monitor.stop()
答案 0 :(得分:1)
即使通过拨号,每秒打开和关闭一次这样的连接也会产生微不足道的流量。即使您完全从循环中删除了延迟,它对现代网络的影响也会非常小,甚至可能不明显。相对较慢的Python速度加上启动TCP连接所固有的延迟意味着即使您尝试过,也无法通过反复打开和关闭一个连接来接近网络。