#TCP控制扫码 IVYSUN
# -*- coding: utf-8 -*-
"""
tcp control IVYSUN scanner gun scan
"""
from socketserver import socket
import struct
import ctypes
import time
import logging
import traceback
class ScanNow(object):
def __init__(self, ip='192.168.250.233', port=10001, timeout=2):
self.smq_ip = ip
self.smq_port = int(port)
self.timeout = float(timeout)
self.smq = None
self.connect_status = False
logging.basicConfig(level=logging.INFO, format="%(name)s %(asctime)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
self.logger = logging.getLogger(__name__)
def __del__(self):
"""
clear connect
:return:
"""
self.scanner_disconnect()
def scanner_connect(self):
"""
connect
:return: bool
"""
self.smq = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.smq.settimeout(self.timeout)
self.logger.info('start connect')
ref = self.smq.connect_ex((self.smq_ip, self.smq_port))
if ref == 0:
self.connect_status = True
self.logger.info('connect successfully')
return True
else:
self.logger.error('connect failed')
return False
def scanner_disconnect(self):
"""
disconnect
:return: bool
"""
if self.connect_status:
self.smq.close()
self.connect_status = False
self.logger.info('disconnect')
return True
def scanner_start(self, cycle=3, times=1):
"""
:param cycle: 连续尝试扫描次数
:param times: 连续扫描时间间隔
:return:
"""
for i in range(3):
if not self.connect_status:
if self.scanner_connect():
break
else:
break
else:
self.logger.error('scan connect failed')
return False
data_pack = struct.Struct('!1l')
pre_buffer = ctypes.create_string_buffer(data_pack.size)
data_pack.pack_into(pre_buffer, 0, 1)
for j in range(cycle):
self.smq.send(pre_buffer)
try:
ref = self.smq.recv(1024)
if ref and cycle >= 2:
self.logger.info(ref)
return ref
except TimeoutError:
self.logger.error(traceback.format_exc())
return False
time.sleep(times)
if __name__ == '__main__':
smq = ScanNow(ip='139.189.1.34')
smq.scanner_connect()
smq.scanner_start()
来源:CSDN
作者:sunshine you know
链接:https://blog.csdn.net/weixin_42130767/article/details/103546826