[英]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.