繁体   English   中英

如何从python中的snmp解码IP地址

[英]How to decode ip addresses from snmp in python

python脚本从Cisco交换机(cdp和8021x)检索IP地址。 但是,这些IP地址不是以标准IP地址格式(xxxx)传输的,因此我必须对其进行转换。

对于某些地址,其工作方式如下

INPUT: [u'\n', u'&', u'\xd1', u'{']
>>> print ord(u'\n'),ord(u'&') , ord(u'\xd1') , ord(u'{')
OUTPUT: 10 38 209 123

我可以轻松解码的以下IP地址

[u'\n', u'&', u'\xd1', u'l'] --> 10.38.209.108
[u'\n', u'&', u'\xd1', u'f'] --> 10.38.209.102
[u'\n', u'&', u'\xd1', u'p'] --> 10.38.209.112
[u'\n', u'&', u'\xa9', u'.'] --> 10.38.169.46
[u'\n', u'&', u'\xa9', u'*'] --> 10.38.169.42
[u'\n', u'&', u'\xd1', u'v'] --> 10.38.209.118
[u'\n', u'&', u'\xd1', u'g'] --> 10.38.209.103
[u'\n', u'&', u'\xd1', u'|'] --> 10.38.209.124
[u'\n', u'&', u'\xa9', u','] --> 10.38.169.44
[u'\n', u'&', u'\xd1', u'u'] --> 10.38.209.117
[u'\n', u'&', u'\xa8', u'\x15'] --> 10.38.168.21

但不幸的是,我不知道如何正确解码以下IP地址

[u'\n', u'&', u'\u044a'] --> 10.38.1098  (incorrect)
[u'\n', u'&', u'\u044b'] --> 10.38.1099  (incorrect)
[u'\n', u'&', u'\u0459'] --> 10.38.1113  (incorrect)
[u'\n', u'&', u'\u045b'] --> 10.38.1115  (incorrect)
[u'\n', u'&', u'\u044e'] --> 10.38.1102  (incorrect)
[u'\n', u'&', u'\u044d'] --> 10.38.1101  (incorrect)
[u'\n', u'&', u'\u0445'] --> 10.38.1093  (incorrect)
[u'\n', u'&', u'\u0458'] --> 10.38.1112  (incorrect)
[u'\n', u'&', u'\u045e'] --> 10.38.1118  (incorrect)
[u'\n', u'&', u'\u0446'] --> 10.38.1094  (incorrect)
[u'\n', u'&', u'\u045f'] --> 10.38.1119  (incorrect)
[u'\n', u'&', u'\u0462'] --> 10.38.1122  (incorrect)

有谁知道我如何才能正确地将列表的第三部分解码为ip地址的第三和第四八位字节?

您可以将它encode()为字节,然后将有4个字符/字节。

a = [u'\n', u'&', u'\u044a']
a = ''.join(a)

b = a.encode('utf-8')

print(b[0], b[1], b[2], b[3])

结果:

10 38 209 138

或作为字符串

print('{}.{}.{}.{}'.format(*b))

结果:

"10.38.209.138"

顺便说一句:如果您是从网络/套接字获取此数据的,那么(至少在Python3中)应该以字节为单位获取。


编辑:完整的例子-或多或少的通用方法

data = [
    [u'\n', u'&', u'\xd1', u'{'], # --> 10 38 209 123
    [u'\n', u'&', u'\xd1', u'l'], # --> 10.38.209.108
    [u'\n', u'&', u'\xd1', u'f'], # --> 10.38.209.102
    [u'\n', u'&', u'\xd1', u'p'], # --> 10.38.209.112
    [u'\n', u'&', u'\xa9', u'.'], # --> 10.38.169.46
    [u'\n', u'&', u'\xa9', u'*'], # --> 10.38.169.42
    [u'\n', u'&', u'\xd1', u'v'], # --> 10.38.209.118
    [u'\n', u'&', u'\xd1', u'g'], # --> 10.38.209.103
    [u'\n', u'&', u'\xd1', u'|'], # --> 10.38.209.124
    [u'\n', u'&', u'\xa9', u','], # --> 10.38.169.44
    [u'\n', u'&', u'\xd1', u'u'], # --> 10.38.209.117
    [u'\n', u'&', u'\xa8', u'\x15'], # --> 10.38.168.21

    [u'\n', u'&', u'\u044a'], # --> 10.38.1098  (incorrect)
    [u'\n', u'&', u'\u044b'], # --> 10.38.1099  (incorrect)
    [u'\n', u'&', u'\u0459'], # --> 10.38.1113  (incorrect)
    [u'\n', u'&', u'\u045b'], # --> 10.38.1115  (incorrect)
    [u'\n', u'&', u'\u044e'], # --> 10.38.1102  (incorrect)
    [u'\n', u'&', u'\u044d'], # --> 10.38.1101  (incorrect)
    [u'\n', u'&', u'\u0445'], # --> 10.38.1093  (incorrect)
    [u'\n', u'&', u'\u0458'], # --> 10.38.1112  (incorrect)
    [u'\n', u'&', u'\u045e'], # --> 10.38.1118  (incorrect)
    [u'\n', u'&', u'\u0446'], # --> 10.38.1094  (incorrect)
    [u'\n', u'&', u'\u045f'], # --> 10.38.1119  (incorrect)
    [u'\n', u'&', u'\u0462'], # --> 10.38.1122  (incorrect)
]

for a in data:

    if len(a) == 3:
        b = ''.join(a).encode('utf-8')
    else:
        b = [ord(x) for x in a]

    print(a, '  bytes:', b[0], b[1], b[2], b[3], '  IP: {}.{}.{}.{}'.format(*b))

结果(Linux Mint,Python 3.5.2)

['\n', '&', 'Ñ', '{']   bytes: 10 38 209 123   IP: 10.38.209.123
['\n', '&', 'Ñ', 'l']   bytes: 10 38 209 108   IP: 10.38.209.108
['\n', '&', 'Ñ', 'f']   bytes: 10 38 209 102   IP: 10.38.209.102
['\n', '&', 'Ñ', 'p']   bytes: 10 38 209 112   IP: 10.38.209.112
['\n', '&', '©', '.']   bytes: 10 38 169 46   IP: 10.38.169.46
['\n', '&', '©', '*']   bytes: 10 38 169 42   IP: 10.38.169.42
['\n', '&', 'Ñ', 'v']   bytes: 10 38 209 118   IP: 10.38.209.118
['\n', '&', 'Ñ', 'g']   bytes: 10 38 209 103   IP: 10.38.209.103
['\n', '&', 'Ñ', '|']   bytes: 10 38 209 124   IP: 10.38.209.124
['\n', '&', '©', ',']   bytes: 10 38 169 44   IP: 10.38.169.44
['\n', '&', 'Ñ', 'u']   bytes: 10 38 209 117   IP: 10.38.209.117
['\n', '&', '¨', '\x15']   bytes: 10 38 168 21   IP: 10.38.168.21
['\n', '&', 'ъ']   bytes: 10 38 209 138   IP: 10.38.209.138
['\n', '&', 'ы']   bytes: 10 38 209 139   IP: 10.38.209.139
['\n', '&', 'љ']   bytes: 10 38 209 153   IP: 10.38.209.153
['\n', '&', 'ћ']   bytes: 10 38 209 155   IP: 10.38.209.155
['\n', '&', 'ю']   bytes: 10 38 209 142   IP: 10.38.209.142
['\n', '&', 'э']   bytes: 10 38 209 141   IP: 10.38.209.141
['\n', '&', 'х']   bytes: 10 38 209 133   IP: 10.38.209.133
['\n', '&', 'ј']   bytes: 10 38 209 152   IP: 10.38.209.152
['\n', '&', 'ў']   bytes: 10 38 209 158   IP: 10.38.209.158
['\n', '&', 'ц']   bytes: 10 38 209 134   IP: 10.38.209.134
['\n', '&', 'џ']   bytes: 10 38 209 159   IP: 10.38.209.159
['\n', '&', 'Ѣ']   bytes: 10 38 209 162   IP: 10.38.209.162

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM