作者名:Demo不是emo
主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构每日emo:唯有信仰与日月亘古不变

经过一段时间python黑帽编程的学习,我们的漏洞扫描器搭建之旅就要开始了,最开始当然要做的就是端口扫描器,所以这篇博客我们的内容就是搭建一个TCP扫描器,来看看吧
侦查是任何网络攻击的第一步。在选择目标的漏洞利用程序之前攻击者必须找 出漏洞在哪。在下面的章节中,我们将建立一个小型的侦查脚本用来扫描目标 主机开放的 TCP 端口。
代码如下
  
   - 
    
     
    
    
     
      # coding=UTF-8
     
    
- 
    
     
    
    
     
      import optparse
     
    
- 
    
     
    
    
     
      import socket
     
    
- 
    
     
    
    
     
      import threading
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      screenLock = threading.Semaphore(value=
      1)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      def 
      connScan(
      tgtHost, tgtPort):
     
    
- 
    
     
    
    
         
      try:
     
    
- 
    
     
    
    
     
              connSkt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    
- 
    
     
    
    
     
              connSkt.connect((tgtHost, tgtPort))
     
    
- 
    
     
    
    
             
      print(
      '[+]%d/tcp open' % tgtPort)
     
    
- 
    
     
    
    
         
      except Exception:
     
    
- 
    
     
    
    
             
      print(
      '[-]%d/tcp closed' % tgtPort)
     
    
- 
    
     
    
    
         
      try:
     
    
- 
    
     
    
    
             
      # connSkt.send('ViolentPython\r\n')
     
    
- 
    
     
    
    
     
              results = connSkt.recv(
      1024).decode(
      "UTF-8")
     
    
- 
    
     
    
    
     
              screenLock.acquire()
     
    
- 
    
     
    
    
             
      print(
      '[+]%d/tcp info: ' % tgtPort + 
      str(results))
     
    
- 
    
     
    
    
         
      except Exception:
     
    
- 
    
     
    
    
     
              screenLock.acquire()
     
    
- 
    
     
    
    
             
      print(
      '[-]%d can"t receive info' % tgtPort)
     
    
- 
    
     
    
    
         
      finally:
     
    
- 
    
     
    
    
     
              screenLock.release()
     
    
- 
    
     
    
    
     
              connSkt.close()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      def 
      portScan(
      tgtHost, tgtPorts):
     
    
- 
    
     
    
    
         
      try:
     
    
- 
    
     
    
    
     
              tgtIP = socket.gethostbyname(tgtHost)
     
    
- 
    
     
    
    
         
      except Exception:
     
    
- 
    
     
    
    
             
      print(
      "[-] Cannot resolve '%s': Unknown host" % tgtHost)
     
    
- 
    
     
    
    
             
      return
     
    
- 
    
     
    
    
         
      try:
     
    
- 
    
     
    
    
     
              tgtName = socket.gethostbyaddr(tgtIP)
     
    
- 
    
     
    
    
             
      print(
      '\n[+] Scan Results for: ' + tgtName[
      0])
     
    
- 
    
     
    
    
         
      except Exception:
     
    
- 
    
     
    
    
             
      print(
      '\n[+] Scan Results for: ' + tgtIP)
     
    
- 
    
     
    
    
     
          socket.setdefaulttimeout(
      1)
     
    
- 
    
     
    
    
         
      for tgtPort 
      in tgtPorts:
     
    
- 
    
     
    
    
             
      print(
      'Scanning port ' + 
      str(tgtPort))
     
    
- 
    
     
    
    
     
              t = threading.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=
      'int', 
      help=
      'specify target port')
     
    
- 
    
     
    
    
     
          (options, args) = parser.parse_args()
     
    
- 
    
     
    
    
     
          tgtHost = options.tgtHost
     
    
- 
    
     
    
    
     
          tgtPort = options.tgtPort
     
    
- 
    
     
    
    
     
          args.append(tgtPort)
     
    
- 
    
     
    
    
         
      if (tgtHost 
      is 
      None) | (tgtPort 
      is 
      None):
     
    
- 
    
     
    
    
             
      print(
      '[-] You must specify a target host and port[s]!')
     
    
- 
    
     
    
    
     
              exit(
      0)
     
    
- 
    
     
    
    
     
          portScan(tgtHost, args)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      if __name__ == 
      '__main__':
     
    
- 
    
     
    
    
     
          main()
     
    
 效果展示

这个端口扫描器有两个作用,
一个就是探测目标主机的指定端口开放状态
另外一个就是探测指定端口运行的服务信息
这个代码拿去就可以用,同时也在我的github和gitee上更新了 ,里面还附带有详细的用法说明,工具后面也会不断更新,欢迎持续关注
Gitee地址:PortScan_pro: TCP端口扫描器加强版 (gitee.com)
转载:https://blog.csdn.net/qq_63844103/article/details/128454209
查看评论
					 
					