我已经创建了一个网络扫描仪,它在一系列的IP上寻找一个特定的端口。我想线程的应用程序,但我得到和错误消息
ERROR: for worker in range(network.hosts): TypeError: 'method' object cannot be interpreted as an integer
现在我明白了为什么会出现错误,因为IP地址不是整数。但是,我更喜欢将子网分成相等的部分,并在每个线程的基础上运行X个IP。在
示例
^{pr2}$沿着这些路线。我不太清楚该怎么做。我发布的主要功能,tcp ping 以及线程功能。在
我怀疑我需要得到一个IP的列表,然后告诉线程一次在X个IP上执行,但并不确定如何执行。在
提前谢谢你的帮助
好像你不能在名单上启动一个工人?这里是我当前关于错误消息的位置。其他线程似乎有相同的错误消息。这是jsut输出的最后几行。在
^{3}$代码:
# Library Imports
from datetime import datetime
from queue import Queue
import threading
import argparse
import logging
import os
import socket
import ipaddress
# Defines Global Variables
BUFFER = 4096 # 4k The size of the TCP Buffer
MESSAGE = 'TA:getattrlong'.encode('utf-8')
TCP_PORT = 2359 # Sets Port to 2359 (iPerf Remote)
MIN_SCAN_TIMEOUT = .010 # Sets Min socket timeout to 10ms 'milliseconds'
MAX_SCAN_TIMEOUT = .160 # Sets Max socket timeout to 100ms 'milliseconds'
IPERF_QUERY_TIMEOUT = 5 # Sets socket timeout to 5s 'seconds'
# File I/O Vars
LOG_FILE = 'iperfdiscovery.log' # Testing log, revert to above on actual AirCheck G2
IPERF_ACCESSORY_FILE = 'iperfaccessory' # iPerf Accessory output file
OPTION_FILE = '/mnt/mmc3/iperfaccessory.conf' # iPerf Accessory option file "Allows increasing timeout"
THREADS = 50
def main():
"""
iPerf Accessory Discovery Utility for AirCheck G2 V2.0
:return:
"""
# Logging (File Location, Log level, date, message)
logging.basicConfig(filename=LOG_FILE, filemode='w', level=logging.DEBUG, format='%(asctime)s %(message)s')
# Removes iPerf Accessory File if its exists File Output Logs errors
# NOTE: File cannot be found is normal in the log expected behavior
try:
os.remove(IPERF_ACCESSORY_FILE)
except OSError as err_msg:
logging.debug('DEBUG: OS Error %s', err_msg)
pass
# Arg Parser
parser = argparse.ArgumentParser()
parser.add_argument('network', help='The IP/Network you wish to scan', type=str)
parser.add_argument('-t', '--timeout', nargs='?', const=1, type=float, help='Optional socket timeout')
parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.9')
parser.add_argument('-o', '--options', action='store_true',
help='Uses the advanced configuration options if present')
parser.add_argument('-th', '--threading', action='store_true',
help="Enables multiple threads")
try:
args = parser.parse_args()
network = args.network # Gets network from args parse mandatory argument
network = (ipaddress.ip_network(network, strict=False))
if args.options:
OPTION_FILE()
if args.timeout:
MIN_SCAN_TIMEOUT = args.timeout
print(MIN_SCAN_TIMEOUT)
if args.threading:
q = Queue
iperf = []
subnet = []
for host in network.hosts(): # List of IP's in subnet
subnet.append(str(host))
for i in range(0, len(subnet), THREADS):
iperf.append(subnet[i: i + THREADS])
for x in range(THREADS):
t = threading.Thread(target=threader, args=q)
t.daemon = True
t.start()
for worker in range(iperf[0:]):
q.put(worker)
q.join()
else:
tcp_port_ping(network)
except KeyboardInterrupt as err_msg:
logging.debug(err_msg)
except OSError as err_msg:
logging.debug(err_msg)
def threader(q):
while True:
worker = q.get()
t_tcp_port_ping(worker)
q.task_done()
def t_tcp_port_ping():
active_ip_count = 0
tmp_iperf_list = []
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as tcp_sock:
result = tcp_sock.connect_ex((str(host), TCP_PORT)) # Check if IP is Valid and Port is Open
if result == 0:
active_ip_count += 1 # Increment valid IP counter
tmp_iperf_list.append(host) # Appends iPerf attributes to iPerf Remote list
logging.debug("DEBUG: IP(s) to be scanned %s", host) # Debug IP Address of remote(s)
except OSError as err_msg:
logging.debug('Socket Error %s', err_msg)
print(err_msg)
pass
print(tmp_iperf_list)
目前没有回答
相关问题 更多 >
编程相关推荐