端口扫描仪显示所有端口已关闭

2024-04-19 12:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,不明白为什么要写下面的脚本 工作不正常,我现在处在一个我看不见木头的舞台上 树。在

我试着从《暴力Python》一书中创建端口扫描程序。我相信 本书使用Python2.6,但我是用Python3.7创建的。在

在这个网站的其他帖子中使用提示和提示,我已经让端口扫描器 在我的实验室设备上扫描一些计算机,但是扫描总是 显示要“关闭”的端口。我用nmap扫描电脑以确保 在我的端口扫描程序脚本中使用的一些打开的端口。在

我的剧本在下面。在

import optparse
from socket import *
from threading import *
screenLock = Semaphore(value=1)

def connScan(tgtHost, tgtPort):
    try:
        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.connect((tgtHost, tgtPort))
        connSkt.send('ViolentPython\r\n')
        results = connSkt.recv(100)
        screenLock.acquire()
        print('[+]%d/tcp open'% tgtPort)
        print('[+]' + str(results))
    except:
        screenLock.acquire()
        print('[-]%d/tcp closed'% tgtPort)
    finally:
        screenLock.release()
        connSkt.close()

def portScan(tgtHost, tgtPorts):
    try:
        tgtIP = gethostbyname(tgtHost)
    except:
        print("[-] Cannot resolve '%s': Unknown host"%tgtHost)
        return
    try:
        tgtName = gethostbyaddr(tgtIP)
        print('\n[+] scan results for: ' + tgtName[0])
    except:
        print('\n[+] Scan results for: ' + tgtIP)
    setdefaulttimeout(1)
    for tgtPort in tgtPorts:
        t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
        t.start()

def main():
    parser = optparse.OptionParser('usage %prog '+ '-H <target host> -p <target port>')

    parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
    parser.add_option('-p', dest='tgtPort', type='string', help='specify target port[s] seperated by comma')

    (options, args) = parser.parse_args()

    tgtHost = options.tgtHost
    tgtPorts = [p.strip() for p in options.tgtPort.split(',')]

    if (tgtHost == None) | (tgtPorts[0] is None):
        print(parser.usage)
        exit(0)

    portScan(tgtHost, tgtPorts)

if __name__ == '__main__':
    main()

我从Powershell运行脚本:

python 01_portscan_revA.py -H 192.168.0.207 -p 22,80,135,443,445

产生以下输出:

^{pr2}$

我肯定离这儿不远,我会很乐意为你效劳的 任何人都可以提出尝试解决这个问题。在

非常感谢

谢谢大家回复我。我又看了一遍我的剧本 做了一些改动,我不确定这些是否正确。在

为了捕捉错误,我更改了def connScan如下。在

def connScan(tgtHost, tgtPort):
try:
    connSkt = socket(AF_INET, SOCK_STREAM)
    connSkt.connect((tgtHost, tgtPort))
    connSkt.send (b'ViolentPython\r\n')
    results = connSkt.recv(100)
    screenLock.acquire()
    print('[+]%d/tcp open'% tgtPort)
    print('[+]' + str(results))
except Exception as e:
    screenLock.acquire()
    print('Error: {0}'.format(str(e)))
    print('[-]%d/tcp closed'% tgtPort)
finally:
    screenLock.release()
    connSkt.close()

最初我遇到了一个“expecting bytes type object”错误,所以我在 前面的“Violentpython”将转换为字节。在

现在输出如下:

[+] scan results for: Cheryls
[+]139/tcp open
[+]b'\x83\x00\x00\x01\x8f'
Error: [WinError 10054] An existing connection was forcibly closed by the 
remote host
[-]445/tcp closed
Error: timed out
[-]80/tcp closed
Error: timed out
[-]443/tcp closed
Error: timed out
[-]135/tcp closed
Error: timed out
[-]1030/tcp closed

正如Vovanrock2002建议的那样,我会出现超时错误。在


Tags: parsertargetfordeferrorresultstcpprint
1条回答
网友
1楼 · 发布于 2024-04-19 12:24:57

最有可能的是,列表端口上的应用程序一旦意识到'ViolentPython\r\n'不是它们支持的协议的一部分,就会立即关闭连接。另一方面,results = connSkt.recv(100)伴随着setdefaulttimeout(1)将使recv-throw socket.timeout异常。在

根据python文档,connSkt.connect也可以抛出超时。所以你基本上需要:

  1. 停止通过裸体except捕捉东西。如果不知道要等待什么异常,请暂时只捕获Exception,检查捕获的对象,然后用更具体的内容替换它。在
  2. connectsend + recv拆分为不同的try块。在

相关问题 更多 >