【问题标题】:Python PortscannerPython 端口扫描器
【发布时间】:2015-08-17 20:07:31
【问题描述】:

我一直在编写一个小脚本来选择扫描主机以查找特定端口范围,并在尝试测试自定义范围时遇到了一些奇怪的错误:

Traceback (most recent call last):
File "/root/Desktop/ScannerV1Beta.py", line 74, in <module>
   result = s.connect_ex((targetIP, i))

File "/usr/lib/python2.7/socket.py", line 224, in meth
   return getattr(self._sock,name)(*args)

File "/usr/lib/python2.7/socket.py", line 170, in _dummy
   raise error(EBADF, 'Bad file descriptor')

   socket.error: [Errno 9] Bad file descriptor
#!/usr/bin/env python

from socket import *


target = raw_input('Enter host or ip to scan: ')
targetIP = gethostbyname(target)
choice = raw_input('Please Choose the port range:\n (1) 1 - 1023 \n (2) 1024 - 5000 \n (3) 5000 - 10000 \n (c) custom \n ')
print 'Starting scan on host ', targetIP



if choice == '1':
    for i in range(1, 134):
        s = socket(AF_INET, SOCK_STREAM)

        result = s.connect_ex((targetIP, i))

        if(result == 0) :
            print 'Port %d: OPEN' % (i)
        else:
            print 'Port %d: CLOSED' % (i)
        s.close()

    for i in range(133, 1024):
        s = socket(AF_INET, SOCK_STREAM)

        result = s.connect_ex((targetIP, i))

        if(result == 0) :
            print 'Port %d: OPEN' % (i)
        else:
            print 'Port %d: CLOSED' % (i)

        s.close()



elif choice == '2':
    for i in range(1024, 5000):
        s = socket(AF_INET, SOCK_STREAM)

        result = s.connect_ex((targetIP, i))

        if(result == 0) :
            print 'Port %d: OPEN' % (i)
        else:
            print 'Port %d: CLOSED' % (i)

        s.close()

if choice == '3':
    for i in range(5000, 10000):
        s = socket(AF_INET, SOCK_STREAM)

        result = s.connect_ex((targetIP, i))

        if(result == 0) :
            print 'Port %d: OPEN' % (i)
        else:
            print 'Port %d: CLOSED' % (i)

        s.close()
if choice == 'c':
    firstPort = raw_input('Please specify starting Port: ')
    endPort = raw_input('Please specify ending Port(max 65535): ')
    endPort = int(endPort)
    firstPort = int(firstPort)
    s = socket(AF_INET, SOCK_STREAM)

    if firstPort in range(0, 65535):
        if endPort in range(0, 65535):
            for i in range(firstPort, endPort):
                result = s.connect_ex((targetIP, i))
                if(result == 0) :
                    print 'Port %d: OPEN' % (i)
                else:
                    print 'Port %d: CLOSED' % (i)
                s.close()
        else:
            print('Error: Ports not in range!!')
            s.close()
    else:
        print('Error:Ports not in range!!')
        s.close()

我知道我处理和转换所选端口的方式不是最好的选择,但我在那里非常努力。上述错误的可能原因是什么?

【问题讨论】:

标签: python port port-scanning


【解决方案1】:

在最后一个“for”中,您正在关闭套接字,但不要创建新的。将最后一个“for”循环改写为:

for i in range(firstPort, endPort):
    s = socket(AF_INET, SOCK_STREAM)
    result = s.connect_ex((targetIP, i))
    if(result == 0) :
        print 'Port %d: OPEN' % (i)
    else:
        print 'Port %d: CLOSED' % (i)
    s.close()

【讨论】:

    【解决方案2】:

    端口扫描仪


    #!/usr/bin/python3
    import socket
    import os
    import platform
    def cls():
        if platform.system() == 'Linux':
          os.system("clear")
        else:
            os.system("cls")
    def main():
        cls()
        print("---[ Port Scanner ]---\n")
        host = input("Enter Host: ")
        print("\n")
        ports = [21,22,23,25,80,111,443] # ports
        for port in ports:
           s = socket.socket()
           ch = s.connect_ex((host,port))
           if ch.status_code == 200:
             print(f"Port: {port} Open!")
           else:
               print(f"Port: {port} Filter!")
    if __name__ == '__main__':
      try:
         main()
      except (KeyboardInterrupt,EOFError):
          print("\nStop !!!")
          exit()
    

    【讨论】:

    • 欢迎来到 Stack Overflow。请编辑您的答案并解释它如何回答所提出的具体问题。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请参阅如何回答。 stackoverflow.com/help/how-to-answer
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • 请解释一下这段代码是如何工作的。此外,这还没有解释为什么 Johnny 的代码不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多