如何创建扫描Web服务器的脚本,同时将IP解析为列表(py3)

时间:2017-04-22 05:57:11

标签: python python-2.7 python-3.x

对于我的介绍类,我必须创建一个扫描Web服务器的脚本。扫描应该在模块中实现,用户输入和输出应该在导入模块的脚本中实现。

到目前为止我的实际脚本(不是我有这个模块)

#!/usr/bin/python3

import re
import socket

hostServer = input("Enter an IP address or list (seperated by commas) to scan: ").split(',')

import socketmodule

print("-" * 60)
print("Please wait, scanning remote host", remoteServer)
print("-" * 60)

我目前在我的模块中有这个

#!/usr/bin/python3

import socket

s=socket.socket()
s.connect((hostServer, 80))  # I'm getting an error for using hostServer but 
                               how else should I pass the list of IP 
                               addresses into my module?
s.send(b'GET / HTTP/1.0\n\n')
s.recv(1024)
while True:
    data.s.recv(1024)
    if data:
       print('Recieved {} bytes from client at {}.\n{}'.format(len(data), addr, data))
       conn.sendall(data)
       break
s.close()

有人可以指导我摆脱这种混乱

1 个答案:

答案 0 :(得分:0)

如何收听多个端口

您需要为每个端口创建一个套接字,这意味着您只能通过导入模块来使用普通方法调用。

将代码提取到函数或类中。这是一个例子:

 #!/usr/bin/python3

import socket

class PortListener(object):
    CHUNK_SIZE = 1024

    def __init__(self, host_server, port):
        self.host = host_server
        self.port = port

    def listen(self):
        self.socket = socket.socket()
        self.socket.connect((self.host, self.port))
        self.socket.send(b'GET / HTTP/1.0\n\n')
        while True:
            data = self.socket.recv(self.CHUNK_SIZE)
            if data:
                print('Recieved {} bytes from client at {}.\n{}'.format(len(data), '{}:{}'.format(self.host,
                    self.port), data))

    def close(self, type, value, traceback):
        self.socket.close()

然后,为每个端口创建一个侦听器实例

from socketmodule import PortListener
listener = PortListener('127.0.0.1', 5000)

可能的问题:

对于保留端口(1024以下的任何端口),您需要root访问权限才能收听它。

您可能需要考虑一个循环来创建一个侦听器池,以便从多个端口接收数据。完成与Web服务器的交互后,请确保套接字已关闭。