IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址 -> 正文阅读

[网络协议]Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 开发人员:
# time: 2021-09-07 20:37
# 开发工具: PyCharm
# Version: 1.0.0

"""
**声明:
    # 扫描端口功能,get_ip_status()
    # 获取网卡的Mac地址 ,network_card_mac()
    # 局域网扫描器,scapy ,IP地址和MAC地址, scapy_network_ip_mac()
    # 网段IP&Mac ARP协议扫描器,ip_mac_scanner()
    # 获取网卡名称和其ip地址,get_netcard()**
"""


def get_ip_status(ip,port):
    """ # 扫描指定IP 端口功能 """
    import socket
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        server.connect((ip,port))
        print('{0} port {1} is open'.format(ip, port))
    except Exception as err:
        print(err)
        print('{0} port {1} is not open'.format(ip,port))
    finally:
        server.close()

    host = '192.168.9.123'
    for port in range(20,100):
        get_ip_status(host,port)


def network_card_mac():
    """ 获取网卡的Mac地址 """
    from psutil import net_if_addrs
    for k, v in net_if_addrs().items():
        for item in v:
            address = item[1]
            if '-' in address and len(address) == 17:
                print(address.replace("-", ":"))




def scapy_network_ip_mac():
    """ 局域网扫描器,scapy ,IP地址和MAC地址 """
    #from scapy.all import *
    from scapy.layers.l2 import Ether, ARP
    from scapy.sendrecv import srp
    import socket
    import re
    try:
        # 局域网扫描器,scapy
        # 首先要选择网卡的接口,就需要查看网卡接口有什么,在进行选择
        # name = (show_interfaces())
        wind_host_name = socket.gethostname()  # 获取当前主机名
        wind_ip = socket.gethostbyname(wind_host_name) # 获取当前主机ip
        udp_gw_ip = str(re.findall(r'(?<!\d)\d{1,3}\.\d{1,3}\.\d{1,3}(?=\.\d)', wind_ip)[0]) + '.0'
        # wifi = 'Realtek PCIe GBE Family Controller'
        wifi = '以太网'
        if wifi:
            # 模拟发包,向整个网络发包,如果有回应,则表示活跃的主机
            p = Ether(dst='ff:ff:ff:ff:ff:ff') / ARP(pdst='%s/24' % udp_gw_ip)
            # ans表示收到的包的回复
            ans, unans = srp(p, iface=wifi, timeout=5)
            print("一共扫描到%d台主机:" % len(ans))
            # 将需要的IP地址和Mac地址存放在result列表中
            result = []
            for s, r in ans:
                # 解析收到的包,提取出需要的IP地址和MAC地址
                result.append([r[ARP].psrc, r[ARP].hwsrc])
            # 将获取的信息进行排序,看起来更整齐一点
            result.sort()
            # 打印出局域网中的主机
            for ip, mac in result:
                print(ip, '------>', mac)
    except Exception as e:
        print(e)



def ip_mac_scanner(hosts: str, local_mac: str, detail: bool = False):
    # ip_mac_scanner('ip地址/24', local_mac=Mac网卡地址, detail=True)
    # ip_mac_scanner('192.168.199.0/24', local_mac= '3C:2C:30:E7:**:**', detail=True)
    """
    网段IP&Mac ARP协议扫描器
    :param hosts: 网段 e.g.‘*.*.*.*/*’
    :param local_mac: 本地MAC地址,e.g.‘**-**-**-**-**-**’
    :param detail: 是否显示详细信息
    :return: dict { IP: MAC, .... }
    
    """
    from scapy.layers.l2 import Ether, ARP
    from scapy.sendrecv import srp
    import warnings

    if detail:
        print('scanning %s by ARP...' % hosts)
    packet = Ether(dst="ff:ff:ff:ff:ff:ff", src=local_mac) / ARP(pdst=hosts)
    if detail:
        _Answer, _unAnswer = srp(packet, timeout=2, verbose=3)
    else:
        _Answer, _unAnswer = srp(packet, timeout=2, verbose=0)
    if detail:
        print("%d host(s) found:" % len(_Answer))
    result = {}
    for Send, Receive in _Answer:
        _IP = Receive[ARP].psrc
        _Mac = Receive[ARP].hwsrc
        if _IP not in result:
            result[_IP] = _Mac
        else:
            warnings.warn(
                '{_IP_} -> {_nowMac_} unexpected. {_IP_} -> {_existMac_} is '
                'already exist.'
                    .format(_IP_=_IP, _nowMac_=_Mac, _existMac_=result[_IP]))
    if detail:
        print(result)
    return result



def get_netcard():
    """获取网卡名称和其ip地址 """
    import psutil
    # 获取网卡名称和其ip地址,不包括回环
    netcard_info = []
    info = psutil.net_if_addrs()
    for k, v in info.items():
        for item in v:
            if item[0] == 2 and not item[1] == '127.0.0.1':
                netcard_info.append((k, item[1]))
    return netcard_info





if __name__ == '__main__':
    pass
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:08:14  更:2021-09-09 12:10:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/18 19:10:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码