Ошибки атрибутов в базовом скрипте Python - PullRequest
0 голосов
/ 19 февраля 2011

Это очень простой скрипт сканирования портов / пингов.Эти две функции работают нормально, когда я просто использую их по отдельности в другом скрипте, но как только я пробую их в этом скрипте, я получаю ошибки атрибута

#!/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) function Я получаю эту ошибку:

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) выдается эта ошибка:

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'

Любые идеи о том, где я иду не так?Большое спасибо!

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

Вы передаете args.ip в порт сканирования, который затем использует атрибут ip этого (args.ip.ip). Очевидно, args.ip - это не то же самое, что args ( может быть верным для некоторых атрибутов некоторых объектов, но, как правило, это не так, и , безусловно, будет нелогичным здесь) , Либо передайте целую args в функцию, либо (предпочтительно) заставьте функцию принять аргумент ip и просто используйте его (вместо ip.ip). Аналог для pingsweep.

1 голос
/ 19 февраля 2011

Когда вы звоните portscan, вы называете это с args.ip, а не args.

. Вы можете исправить это, сделав это:

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

В качестве альтернативы, если выесли вы хотите передать только ip, вам нужно помнить, что вы присваиваете функции IP, а не объект аргументов.

То же самое относится и к pingsweep.

0 голосов
/ 19 февраля 2011

Вы передали аргументы portscan и pingsweep с этим кодом:

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

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

В этих функциях вы должны использовать их, ссылаясь непосредственно на args. Использование args.ip и args.ip3octets неверно.

...