inet.py

来自「Network Administration Visualized 网络管理可」· Python 代码 · 共 62 行

PY
62
字号
"""Internet packet basicSimple operations like performing checksums and swapping byte orders."""# Copyright 1997, Corporation for National Research Initiatives# written by Jeremy Hylton, jeremy@cnri.reston.va.us#from _ip import *import arrayimport structfrom socket import htons, ntohsdef cksum(s):    if len(s) & 1:	s = s + '\0'    words = array.array('H', s)    sum = 0    for word in words:	sum = sum + (word & 0xffff)    hi = sum >> 16    lo = sum & 0xffff    sum = hi + lo    sum = sum + (sum >> 16)    return (~sum) & 0xffff# Should generalize from the *h2net patterns# This python code is suboptimal because it is based on C code where# it doesn't cost much to take a raw buffer and treat a section of it# as a u_short.def gets(s):    return struct.unpack('H', s)[0] & 0xffffdef mks(h):    return struct.pack('H', h)def iph2net(s):    len = htons(gets(s[2:4]))    id = htons(gets(s[4:6]))    off = htons(gets(s[6:8]))    return s[:2] + mks(len) + mks(id) + mks(off) + s[8:]def net2iph(s):    len = ntohs(gets(s[2:4]))    id = ntohs(gets(s[4:6]))    off = ntohs(gets(s[6:8]))    return s[:2] + mks(len) + mks(id) + mks(off) + s[8:]def udph2net(s):    sp = htons(gets(s[0:2]))    dp = htons(gets(s[2:4]))    len = htons(gets(s[4:6]))    return mks(sp) + mks(dp) + mks(len) + s[6:]def net2updh(s):    sp = ntohs(gets(s[0:2]))    dp = ntohs(gets(s[2:4]))    len = ntohs(gets(s[4:6]))    return mks(sp) + mks(dp) + mks(len) + s[6:]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?