0

これは非常に基本的なポートスキャン/ping スイープ スクリプトです。2 つの関数は、別のスクリプトで個別に使用するだけで問題なく動作しますが、このスクリプトでそれらを試すとすぐに属性エラーが発生します

#!/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) 関数を使用すると、次のエラーが発生します。

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'

どこが間違っているかについてのアイデアはありますか?どうもありがとう!

4

3 に答える 3

1

を呼び出すときは、ではなく、でportscan呼び出します。args.ipargs

これを行うことで修正できます:

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

または、を渡すだけの場合ipは、引数オブジェクトではなく、関数にIPを指定していることを覚えておく必要があります。

同じことが。にも当てはまりpingsweepます。

于 2011-02-19T15:58:25.550 に答える
1

portscan に渡しますargs.ip。portscan はそのip属性 ( args.ip.ip) を使用します。明らかに、args.ipargs(一部のオブジェクトの一部の属性には当てはまりますが、一般的にはそうではなく、ここでは確か非論理的です) と同じではありません。全体argsを関数に渡すか、(推奨) 関数に引数を持たせ、ipそれを ( の代わりにip.ip) 使用するようにします。に類似していpingsweepます。

于 2011-02-19T16:00:27.383 に答える
0

次のコードportscanを使用して引数を渡しました。pingsweep

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

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

これらの関数では、直接参照して使用する必要がありますargsargs.ipand の使用args.ip3octetsは正しくありません。

于 2011-02-19T16:04:05.257 に答える