python实现IP进制格式转换

简介: 版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396536 ...
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396536

原文:http://www.freebuf.com/sectool/140982.html

#!/usr/bin/env python
# -*- coding:utf8 -*-
"""
各种进制的IP表示及其它们的组合
"""
import socket
import struct
import itertools
def ip_split_by_comma_oct(ip):
    """
    :param ip:
    :return:
    """
    parsed_result = set()
    ip_split = str(ip).split('.')
    ip_split_oct = [oct(int(_)) for _ in ip_split]
    parsed_result.add('.'.join(ip_split_oct))
    return parsed_result
def ip_split_by_comma_hex(ip):
    """
    :param ip:
    :return:
    """
    parsed_result = set()
    ip_split = str(ip).split('.')
    ip_split_hex = [hex(int(_)) for _ in ip_split]
    parsed_result.add('.'.join(ip_split_hex))
    return parsed_result
def combination_oct_int_ip(ip):
    """
    :param ip:
    :return:
    """
    result = set()
    parsed_result = set()
    ip_split = str(ip).split('.')
    oct_2 = list(itertools.combinations([0, 1, 2, 3], 2))
    oct_3 = list(itertools.combinations([0, 1, 2, 3], 3))
    for n, _ in enumerate(ip_split):
        _tmp = oct(int(_))
        _delete = ip_split[:n] + ip_split[n+1:]
        _delete.insert(n, _tmp)
        result.add(tuple(_delete))
    for _ in oct_2:
        _tmp_ip = ip_split[:]
        _tmp1 = oct(int(ip_split[_[0]]))
        _tmp2 = oct(int(ip_split[_[1]]))
        del _tmp_ip[_[0]]
        del _tmp_ip[_[1] - 1]
        _tmp_ip.insert(_[0], _tmp1)
        _tmp_ip.insert(_[1], _tmp2)
        result.add(tuple(_tmp_ip))
    for _ in oct_3:
        _tmp_ip = ip_split[:]
        _tmp1 = oct(int(ip_split[_[0]]))
        _tmp2 = oct(int(ip_split[_[1]]))
        _tmp3 = oct(int(ip_split[_[2]]))
        del _tmp_ip[_[0]]
        del _tmp_ip[_[1] - 1]
        del _tmp_ip[_[2] - 2]
        _tmp_ip.insert(_[0], _tmp1)
        _tmp_ip.insert(_[1], _tmp2)
        _tmp_ip.insert(_[2], _tmp3)
        result.add(tuple(_tmp_ip))
    for _ in result:
        parsed_result.add('.'.join(_))
    return parsed_result
def combination_hex_int_ip(ip):
    """
    :param ip:
    :return:
    """
    result = set()
    parsed_result = set()
    ip_split = str(ip).split('.')
    hex_2 = list(itertools.combinations([0, 1, 2, 3], 2))
    hex_3 = list(itertools.combinations([0, 1, 2, 3], 3))
    for n, _ in enumerate(ip_split):
        _tmp = hex(int(_))
        _delete = ip_split[:n] + ip_split[n+1:]
        _delete.insert(n, _tmp)
        result.add(tuple(_delete))
    for _ in hex_2:
        _tmp_ip = ip_split[:]
        _tmp1 = hex(int(ip_split[_[0]]))
        _tmp2 = hex(int(ip_split[_[1]]))
        del _tmp_ip[_[0]]
        del _tmp_ip[_[1] - 1]
        _tmp_ip.insert(_[0], _tmp1)
        _tmp_ip.insert(_[1], _tmp2)
        result.add(tuple(_tmp_ip))
    for _ in hex_3:
        _tmp_ip = ip_split[:]
        _tmp1 = hex(int(ip_split[_[0]]))
        _tmp2 = hex(int(ip_split[_[1]]))
        _tmp3 = hex(int(ip_split[_[2]]))
        del _tmp_ip[_[0]]
        del _tmp_ip[_[1] - 1]
        del _tmp_ip[_[2] - 2]
        _tmp_ip.insert(_[0], _tmp1)
        _tmp_ip.insert(_[1], _tmp2)
        _tmp_ip.insert(_[2], _tmp3)
        result.add(tuple(_tmp_ip))
    for _ in result:
        parsed_result.add('.'.join(_))
    return parsed_result
def combination_hex_int_oct_ip(ip):
    """
    :param ip:
    :return:
    """
    result = set()
    parsed_result = set()
    ip_split = str(ip).split('.')
    hex_3 = list(itertools.combinations([0, 1, 2, 3], 3))
    for n1, n2, n3 in hex_3:
        _tmp_ip = ip_split[:]
        _tmp_2 = oct(int(_tmp_ip[n2]))
        _tmp_3 = hex(int(_tmp_ip[n3]))
        del _tmp_ip[n2]
        del _tmp_ip[n3 - 1]
        _tmp_ip.insert(n2, _tmp_2)
        _tmp_ip.insert(n3, _tmp_3)
        result.add(tuple(_tmp_ip))
    for _ in result:
        parsed_result.add('.'.join(_))
    return parsed_result
if __name__ == '__main__':
    ip = '10.1.100.1'
    ip_int = struct.unpack('!L', socket.inet_aton(ip))[0]
    ip_oct_no_comma = oct(ip_int)
    ip_hex_no_comma = hex(ip_int)
    ip_oct_by_comma = ip_split_by_comma_oct(ip)
    ip_hex_by_comma = ip_split_by_comma_hex(ip)
    all_result = ip_oct_by_comma | ip_hex_by_comma | combination_oct_int_ip(ip) | combination_hex_int_ip(ip) | combination_hex_int_oct_ip(ip)
    for _ip in all_result:
        print _ip

相关文章
|
1月前
|
Python
Python格式
Python格式
27 5
|
2月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2月前
|
数据采集 API 定位技术
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
|
6月前
|
数据格式 Python
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
446 0
|
3月前
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片
32 1
|
3月前
|
安全 Python
Python脚本实现IP按段分类
【10月更文挑战第04天】
34 7
|
3月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
60 0
|
3月前
|
PyTorch 算法框架/工具 数据格式
Python实用记录(八):不同格式之间的转换
本文介绍了Python中不同数据格式之间的转换方法,包括numpy数组与列表、字符串之间的转换,以及PyTorch张量与numpy数组之间的转换。
19 0
|
3月前
|
监控 开发者 Python
Python在AOIP(Audio Over IP)方面的应用探讨
Python在AOIP(Audio Over IP)方面的应用探讨
74 0
|
3月前
|
IDE 搜索推荐 网络安全
Python编程:编写被动信息搜集之网址的IP及Whois查询
Python编程:编写被动信息搜集之网址的IP及Whois查询
36 0