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

这篇博客介绍了如何在PyCharm中使用Python进行域名查询IP、whois查询和端口扫描。作者强调了基础环境搭建的重要性,并分享了代码实现的详细步骤,包括所需库的引入。文章展示了Python-whois库在解决Python3中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要这么去设计,感觉有点反逻辑……在这里插入图片描述
  结果展示:
在这里插入图片描述


总结

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

  待实施的清单:

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhoess

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值