最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的詳細(xì)步驟

 更新時(shí)間:2021年11月08日 10:35:48   作者:炒雞辣雞123  
域名資產(chǎn)監(jiān)控,通過輸入一個(gè)主域名,找到該域名對應(yīng)的ip地址所在的服務(wù)器的端口開閉情況,本文重點(diǎn)給大家介紹用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的問題,需要的朋友可以參考下

應(yīng)用場景

域名資產(chǎn)監(jiān)控,通過輸入一個(gè)主域名,找到該域名對應(yīng)的ip地址所在的服務(wù)器的端口開閉情況。通過定期做這樣的監(jiān)控,有助于讓自己知道自己的資產(chǎn)的整體暴露面情況。

所需要具備的前綴技能

python的簡單使用

linux操作系統(tǒng)的簡單使用

DNS的原理

工具

pycharm 專業(yè)版

xshell 用于部署腳本

步驟

通過域名得到對應(yīng)的ip地址

首先,我們知道對于一個(gè)域名來說,可以設(shè)置很多類型的記錄值,比如A記錄、AAAA記錄、SOA記錄、TXT記錄等等。安全領(lǐng)域常見的記錄值和其含義對應(yīng)關(guān)系如下:

代碼 描述
A IPv4地址記錄
AAAA IPv6地址記錄
CNAME 規(guī)范名稱記錄,一個(gè)主機(jī)名字的別名:
域名系統(tǒng)將會(huì)繼續(xù)嘗試查找新的名字
MX 電郵交互記錄
NS 名稱服務(wù)器記錄
PTR 最常用來運(yùn)行反向DNS查找
SOA 權(quán)威記錄的起始
TXT 文本記錄
而我們要用到的就是A記錄(目前IPv6用得不廣泛)。

通過A記錄,獲取到一個(gè)域名對應(yīng)的IP地址,用python實(shí)現(xiàn)的方法如下:

def dns_a(domain: str):
    dns_servers = '114.114.114.114,114.114.115.115,223.5.5.5,223.6.6.6,180.76.76.76,119.29.29.29,119.29.29.29,1.2.4.8,210.2.4.8,117.50.11.11,52.80.66.66,101.226.4.6,218.30.118.6,123.125.81.6,140.207.198.6,8.8.8.8,8.8.4.4,9.9.9.9,208.67.222.222,208.67.220.220'.split(
        ',')
    loop = asyncio.new_event_loop()
    resolver = aiodns.DNSResolver(loop=loop)
    resolver.nameservers = dns_servers
    try:
        record_a = loop.run_until_complete(resolver.query(domain, 'A'))
        return record_a
    except:
        pass
    return []

在代碼中,為每一次查詢隨機(jī)指定了一個(gè)dns_server,也就是dns查詢服務(wù)器,由于收斂的關(guān)系,不同的查詢服務(wù)器結(jié)果可能不相同。所以可以考慮做得完善一些,這里只查詢了一次,也可以換多個(gè)dns服務(wù)器查詢多次,取并集(并集是不放過所有可能情況,交集是精確但可能漏)。最終該方法就可以實(shí)現(xiàn)獲取域名對應(yīng)的ip地址。

這個(gè)方法中使用到了asyncio和aiodns兩個(gè)包,安裝方法如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn asyncio,aiodns

下面我們以www.mengwa.store為例,看看結(jié)果如何:

在這里插入圖片描述

可以發(fā)現(xiàn)ip地址有了,不過,還需要從結(jié)果中進(jìn)行提取。方法如下:

record_a = dns_a(domain)
ips = []
if type(record_a) == list:
ips = sorted([answer.host for answer in record_a])

這個(gè)ips中存儲的就是排序后的解析記錄ip列表。

對ip地址進(jìn)行端口掃描

通過上面的步驟找到了ip地址,下一步就是對ip地址進(jìn)行端口掃描??稍趻呙柚?,我們還有一個(gè)步驟需要做,需要判斷當(dāng)前ip所在的機(jī)器是否存活。

可能你立馬就想到了ping方法,可是在安全領(lǐng)域,有很多公司都要求服務(wù)器將ICMP協(xié)議給阻止掉,也就是說,ping方法可能返回超時(shí),但是機(jī)器并不一定沒有開啟,只是主動(dòng)給你把請求攔截掉了。

這里我們使用nmap的-sPn參數(shù)進(jìn)行掃描,以www.mengwa.store對應(yīng)的ip地址47.119.137.0為例:

在這里插入圖片描述

然后我們通過代碼來實(shí)現(xiàn)這一邏輯,我們使用python-nmap包,安裝步驟如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn python-nmap

代碼如下:

def check_ip_reachable(ip: str):
    nm = nmap.PortScanner()
    xx = nm.scan(hosts=ip, arguments='-sP') # -sPn也可以
    if 'scan' in xx:
        i = xx.__getitem__('scan')
        if ip in i:
            j = i.__getitem__(ip)
            if 'status' in j:
                status = j['status']
                if 'state' in status:
                    state = status['state']
                    print(ip, state)
                    return state
    print(ip, 'down')
    return 'down'

做這一步的前提是,你本機(jī)安裝了nmap。

通過這里做判斷,如果ip所在機(jī)器是開啟狀態(tài),那么我們就可以對其進(jìn)行端口掃描了。

代碼如下:

# 實(shí)現(xiàn)對端口進(jìn)行掃描,并且返回結(jié)果。使用nmap實(shí)現(xiàn)
def port_scan(ip: str):
    second = check_ip_reachable(ip)
    if second is not None and second == 'up':
        nm = nmap.PortScanner()
        xx = nm.scan(ip)
        print(nm.command_line())
        ans = []
        if 'scan' in xx:
            i = xx.__getitem__('scan')
            if ip in i:
                j = i.__getitem__(ip)
                if 'tcp' in j:
                    tcp = j['tcp']
                    for port in tcp:
                        ans.append(port)
        ans = sorted(ans)
        return ans
    else:
        write_to_file('output/' + time_now + '/ips.txt', ip + ' 不可達(dá)\n')
    return []

nm.command_line()方法可以打印出當(dāng)前執(zhí)行的命令行。(本質(zhì)上這個(gè)包就是一個(gè)命令行調(diào)用包,然后做解析)

以47.119.137.0為例,結(jié)果如下:

在這里插入圖片描述

這里的方法,使用的是nmap默認(rèn)掃描的常見端口,如果有需要,也可以通過給Scan方法,加入Ports參數(shù),自定義要掃描的端口,甚至于全端口。

串聯(lián)起來,實(shí)現(xiàn)通過域名到端口監(jiān)控

def handle_ip(ip: str):
    if not task_ip_set.__contains__(ip):
        try:
            print('ip:' + ip, '開始端口掃描')
            port_result = port_scan(ip)
            val = ''
            print('ip:', ip, '發(fā)現(xiàn)端口', port_result)
            for i in port_result:
                val = val + '\n' + ip + "----" + i.__str__()
            write_to_file('output/' + time_now + '/ip_ports.txt', val)
            task_ip_set.add(ip)
        except Exception as e:
            print(e)
            
def handle_domain(domain: str):
    if not task_domain_set.__contains__(domain):
        print('domain:' + domain)
        record_a = dns_a(domain)
        ips = []
        if type(record_a) == list:
            ips = sorted([answer.host for answer in record_a])
        val = ''
        for i in ips:
            val = val + '\n' + domain + "----" + i.__str__()
        write_to_file('output/' + time_now + '/domain_ips.txt', val)
        print(ips)
        for i in ips:
            handle_ip(i)

這里使用了task_domain_set和task_ip_set用于對作用目標(biāo)進(jìn)行去重。

那么,到這里我們的任務(wù)完成了嗎?

沒有

子域名發(fā)現(xiàn)

如果我的主域名資產(chǎn)有很多二級域名,而我自己又對自己有哪些子域名不清楚,那么這個(gè)時(shí)候就需要做子域名發(fā)現(xiàn)。然后對每一個(gè)子域名調(diào)用前面的方法,找到其對應(yīng)的ip開放的端口。

子域名發(fā)現(xiàn)一般來說有三種方法:

第一種通過對主域名所在網(wǎng)站進(jìn)行爬取,從內(nèi)容中解析出子域名;

第二種通過外部的查詢網(wǎng)站獲取結(jié)果,比如crt、virustotal、fofa等;

第三種通過字典爆破獲取結(jié)果,通過不斷的輪詢dns服務(wù)器,查詢其是否有A記錄的值,如果有,則表明該子域名存在,如果沒有則暫時(shí)認(rèn)為該子域名不存在。

第一種方法,需要實(shí)現(xiàn)一個(gè)爬蟲,拿到網(wǎng)站的內(nèi)容后利用正則表達(dá)式提取里面的子域名,提取的方法如下:

def get_subdomains(value: str, domain: str):
    x = f'(?P<subdomain>[a-zA-Z0-9.]+{domain})'
    pattern = re.compile(x)
    y = pattern.findall(value)
    ans = set()
    for i in y:
        ans.add(i)
    print(ans)
    return ans

第二種方法,利用接口調(diào)用,參見相關(guān)的API接口即可。

第三種方法,子域名爆破。核心代碼如下

answers = await self.resolvers[j].query(cur_domain, 'A') # 查找A記錄
# 如果A記錄有值且沒有報(bào)錯(cuò),則說明該子域名存在

當(dāng)你完成上面的步驟,并且去重之后,就可以將這些子域名作為前面步驟的輸入。這樣,對于用戶需要監(jiān)控的某個(gè)主域名而言,監(jiān)控到的范圍就提升了很多。

請勿用于非已有域名的監(jiān)控,造成的損失與本人無關(guān)。以上測試數(shù)據(jù)均為本人已有域名和ip。

到此這篇關(guān)于用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的文章就介紹到這了,更多相關(guān)python域名資產(chǎn)監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法

    分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法

    這篇文章主要介紹了分享5個(gè)數(shù)據(jù)處理更加靈活的pandas調(diào)用函數(shù)方法,文章基于python的相關(guān)內(nèi)容展開詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • Python爬蟲實(shí)現(xiàn)搭建代理ip池

    Python爬蟲實(shí)現(xiàn)搭建代理ip池

    這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)搭建代理ip池,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對你的工作有所幫助
    2022-06-06
  • python政策網(wǎng)字體反爬實(shí)例(附完整代碼)

    python政策網(wǎng)字體反爬實(shí)例(附完整代碼)

    大家好,本篇文章主要講的是python政策網(wǎng)字體反爬實(shí)例(附完整代碼),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 還不知道Anaconda是什么?讀這一篇文章就夠了

    還不知道Anaconda是什么?讀這一篇文章就夠了

    Anaconda指的是一個(gè)開源的Python發(fā)行版本,其包含了Conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),下面這篇文章主要給大家介紹了關(guān)于Anaconda是什么的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 使用WingPro 7 設(shè)置Python路徑的方法

    使用WingPro 7 設(shè)置Python路徑的方法

    Python使用稱為Python Path的搜索路徑來查找使用import語句導(dǎo)入代碼的模塊。這篇文章主要介紹了使用WingPro 7 設(shè)置Python路徑的方法,需要的朋友可以參考下
    2019-07-07
  • 如何使用Python實(shí)現(xiàn)一個(gè)簡單的window任務(wù)管理器

    如何使用Python實(shí)現(xiàn)一個(gè)簡單的window任務(wù)管理器

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)一個(gè)簡單的window任務(wù)管理器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • pandas DataFrame 警告(SettingWithCopyWarning)的解決

    pandas DataFrame 警告(SettingWithCopyWarning)的解決

    這篇文章主要介紹了pandas DataFrame 警告(SettingWithCopyWarning)的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法

    利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法

    今天小編就為大家分享一篇利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python openCV獲取人臉部分并存儲功能

    python openCV獲取人臉部分并存儲功能

    這篇文章主要為大家詳細(xì)介紹了python openCV獲取人臉部分并存儲功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python異步Web框架sanic的實(shí)現(xiàn)

    python異步Web框架sanic的實(shí)現(xiàn)

    這篇文章主要介紹了python異步Web框架sanic的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

徐州市| 庆安县| 洛隆县| 仪陇县| 台山市| 阳江市| 大港区| 泰州市| 通许县| 车致| 宜黄县| 门源| 灌阳县| 兰考县| 荆州市| 龙泉市| 乌拉特后旗| 思南县| 喜德县| 河间市| 河津市| 乌什县| 万年县| 霞浦县| 三原县| 岳西县| 张家港市| 定兴县| 湖州市| 房产| 吉安县| 前郭尔| 当雄县| 华安县| 大邑县| 大冶市| 叙永县| 黔西| 六安市| 江城| 庄河市|