Pycharm 实现域名查询IP\whois查询\端口扫描-学习填坑笔记


前言

  在近一年时间深度学习数据安全后,我突然惊醒,原来网络安全是必修啊(裂开),但有了19-20年的沉淀,我觉得基础部分已经很扎实了,那如何去提升呢???

一个朋友
  于是在经历了语言的洗礼后,我开始输出这个自动化脚本


一、基础环境搭建

  那么既然要用python,咱们肯定还是需要Pycharm这个工具的,这里我就不过多的去赘述了,就是简单的去官网下载安装就好了(但因为自身家境和生活简洁(就是穷),所以我只能用白嫖版)。
注:支持正版,严于律人,宽以待己。

Pycharm官网地址:https://www.jetbrains.com/pycharm/
在这里插入图片描述

二、代码实现

1.引入库

  为了实现域名查询IP\whois查询\端口扫描,python的部分模块是必不可少的,具体模块如下:

import socket            #用于域名转IP的
import requests          #获取http/https请求,爬虫必备
import urllib            #抓取页面,爬虫必备
import threading		 #多线程
import time     		 #计时、显示时间
from whois import whois  #whois查询

2.域名查IP

代码如下(示例):

def ip_check(url):
    IP = socket.gethostbyname(url)
    url1 = 'http://ip-api.com/json/' + IP    #接口调用查询
    response = requests.get(url1)
     ip_info = {
    
    }
     ip_info = response.json()               #查询网址返回的json数据赋值给ip_info字典
    #对ip_info中的内容,进行读取显示
     print(f'您查询的网站的IP地址是:{
      
      ip_info["query"]}属地信息如下:')
     print(f'国 家:{
      
      ip_info["country"]}')
     print(f'省 份:{
      
      ip_info["regionName"]}')
     print(f'城 市:{
      
      ip_info["city"]}')

  通过socket转换域名IP,在利用接口查询后获取网页内容,在逐个读取打印,最后显示结果如下:

结果显示

3.域名whois查询

代码如下(示例):

def ip_whois(url):
    whois_info = {
    
    }           	#声明一个字典
    whois_info = whois(url.lower()) 		#使用whois模块查询,lower就是统一一下小写
    print(f'域名是:{
      
      whois_info["domain_name"]}')
    print(f'域名注册商是:{
      
      whois_info["registrar"]}')
    print(f'域名注册时间:{
      
      whois_info["creation_date"]}')
    print(f'域名到期时间:{
      
      whois_info["expiration_date"]}')
    print(f'DNS:{
      
      whois_info["name_servers"]}')

  实现内容还是比较简单的,我唯一遇到的问题是:
  whois模块找了半天
  因为whois.whois是python2的函数,因此我在使用python3的时候,本来利用的是whois.query,但是一直报错,因此我认为python3一定会把这个懒人的功能移植过来,因此在我不懈的努力下终于找到了正确的模块:python-whois
  结果展现:

结果显示

4.端口扫描

代码如下(示例):

def duankou_check(url):
     IP = socket.gethostbyname(url)              #域名获取IP
     server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    #创建socket对象,面向连接的
     for de_port in open('D:\渗透资料\FUZZ\端口清单.txt'):   #读取端口
        result = server.connect_ex((IP,int(de_port)))  #套接字,拼接扫描
        if result == 0:
            print(de_port+'is_open\n') 
        else:
            print(de_port+'is_close\n')

这里socket的connect_ex函数 是需要两个括号的,这是我遇到的一个疑问,为什么socket要这么去设计,感觉有点反逻辑……在这里插入图片描述
  结果展示:
在这里插入图片描述


总结

  这次的自动化还是比较简单的,我还会继续以这个为基础去优化深入提升自己,将端口多线程,子域名爆破或者还有什么好玩的大伙都可以提提建议。

  待实施的清单:

  • 多线程端口爆破(性能提升)
  • 子域名爆破(功能)
  • 批量域名查询计入文档(这玩意会不会给我卡死)
  • 花里胡哨的界面(嘿嘿嘿)
  • ……

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Heriz_root/article/details/128370793