2017-09-05 3 views
2

TJ 'O Connorの' Violent Python 'の本からバナーグラバーとポートスキャナをタイプしただけで、実行時に文法エラーは出ませんが、出力はありませんだから誰かが間違ったことを教えてもらえますか? Python 2.6で書かれた本は2.7を使用していますが、それが問題なのかどうかわかりません。どんな助けでも大歓迎です!あなたのコードは、関数の宣言で完全に構成されているので本はまた、「Uとして輸入ソケット」だったが、私はそれを取ったので、それは構文エラーを持って、それはPythonでペンテストする

import optparse 
import socket 


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

def portScan(tgtHost,tgtPorts): 
     try: 
       tgtIP=gethostbyname(tgtHost) 
     except: 
       print "[-] Cannot resolve '%s': Unkonwn host" % tgtHost 
       return 
     try: 
       tgtName= gethostbyaddr(tgtIP) 
       print '\n[+]Scan results for: ' + tgtIP 
       setdefaulttimeout(1) 
       for tgtPort in tgtPorts: 
         print 'Scanning port ' + tgtPort 
         connScan(tgtHost,int(tgtPort)) 
     except: 
       print 'exception granted'  

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='int', help='specify target port[s] seperated by comma') 
     (options,args) = parser.parse_args() 

     tgtHost= options.tgtHost 
     tgtPorts= str(options.tgtPort).split(',') 

     if (tgtHost == None)|(tgtPorts[0] == None): 
       print '[*] You must specify a target host and port[s]' 
       exit(0) 
       portScan(tgtHost,tgtPorts) 
     if __name__=='__main__': 
       main() 
+0

'import module as x'はモジュールを別の名前でインポートします。広く使われている例は 'import numpy as np'です。これにより、異なる名前でモジュールにアクセスすることができます。 – SitiSchu

+0

は、 'if __name__ == '__main __':'文が実際には 'main'関数に含まれているか、それともSOのコピー/ペーストの誤字ですか? – Stael

答えて

1

とにかく何をしたかわからない、何も起こっていない理由があります。あなたが実際にPythonに何かを実行するよう指示することはありません。

if __name__=='__main__': 
     main() 

しかし、あなたはのでmain()機能の一部作り、誤ってインデントあまりを持っている:ジョブが文の場合、このことによって行うことになっていることを

。コードが機能するためには、あなたはとてもようにそれをインデント解除する必要があります。

import socket as Úについては
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='int', help='specify target port[s] seperated by comma') 
    (options,args) = parser.parse_args() 

    tgtHost= options.tgtHost 
    tgtPorts= str(options.tgtPort).split(',') 

    if (tgtHost == None)|(tgtPorts[0] == None): 
      print '[*] You must specify a target host and port[s]' 
      exit(0) 
      portScan(tgtHost,tgtPorts) 

if __name__=='__main__': # NOT a part of the main() 
     main() 

、この行の目的は、この場合Úには、socketと呼ばれるモジュールをインポートし、それにエイリアスを与えることです。それ以降は、socketというコードではなく、Úと言います。

+0

ああ、ありがとう!それはルーキーエラーだった。歓声 –

+0

@donovon_duck問題が解決した場合は、[承諾](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)としてください。運。 – stybl

関連する問題