首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本Python脚本中的属性错误

基本Python脚本中的属性错误
EN

Stack Overflow用户
提问于 2011-02-19 23:53:08
回答 3查看 1.5K关注 0票数 0

这是一个非常基本的端口扫描/ping扫描脚本。当我在另一个脚本中单独使用这两个函数时,这两个函数可以很好地工作,但只要我在此脚本中尝试它们,就会收到属性错误

代码语言:javascript
复制
#!/usr/bin/python2.7

import argparse
import socket
import sys

def main():

    parser = argparse.ArgumentParser(description="Do you wish to scan for live hosts or conduct a port scan?")
    parser.add_argument("-s", dest='ip3octets', action='store', help='Enter the first three octets of the class C network to scan for live hosts')
    parser.add_argument("-p", dest='ip', action='store',help='conduct a portscan of specified host')

    args = parser.parse_args()

    if args.ip != None:
        portscan(args.ip)

    if args.ip3octets != None:
        pingsweep(args.ip3octets)

def portscan(args):
    for port in range(20, 1025):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        portinfo = s.connect_ex((args.ip, port))
            if (portinfo == 0):
                    print port, " is open"
        s.close()

def pingsweep(args):
    for ips in range(1, 255):

                host = args.ip3octets+"."+str(ip)
                data = "ping -c 1 " +host
                process = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE)
                #give it time to respond
                process.wait()
                result_str = process.stdout.read()

                if '64 bytes from' in result_str:
                        print host, ' is up'

if __name__ == "__main__":main()

如果我使用端口扫描(-p)函数,我会得到这个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./portscannertest.py", line 42, in <module>
    if __name__ == "__main__":main()
  File "./portscannertest.py", line 16, in main
    portscan(args.ip)
  File "./portscannertest.py", line 24, in portscan
    portinfo = s.connect_ex((args.ip, port))
AttributeError: 'str' object has no attribute 'ip'

在使用pingsweep (-s)函数时,会产生以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./portscannertest.py", line 42, in <module>
    if __name__ == "__main__":main()
  File "./portscannertest.py", line 19, in main
    pingsweep(args.ip3octets)
  File "./portscannertest.py", line 32, in pingsweep
    host = args.ip3octets+"."+str(ip)
AttributeError: 'str' object has no attribute 'ip3octets'

你知道我哪里错了吗?非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-19 23:58:26

当您调用portscan时,使用args.ip而不是args调用它。

您可以通过执行以下操作来修复它:

代码语言:javascript
复制
if args.ip != None:
    portscan(args)

或者,如果你只想传入参数,你需要记住你给函数的是IP,而不是ip对象。

pingsweep也是如此。

票数 1
EN

Stack Overflow用户

发布于 2011-02-20 00:00:27

您将args.ip传递给portscan,然后portscan使用该端口的ip属性(args.ip.ip)。显然,args.ipargs不是一回事(对于某些对象的某些属性可能是真的,但通常情况并非如此,在这里肯定是不合逻辑的)。要么将整个args传递给函数,要么(首选)让函数接受一个参数ip并直接使用该参数(而不是ip.ip)。与pingsweep类似。

票数 1
EN

Stack Overflow用户

发布于 2011-02-20 00:04:05

您使用以下代码将参数传递给了portscanpingsweep

代码语言:javascript
复制
if args.ip != None:
    portscan(args.ip)

if args.ip3octets != None:
    pingsweep(args.ip3octets)  

在这些函数中,您应该通过直接引用args来使用它们。使用args.ipargs.ip3octets是不正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5051758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档