| | 4131 | class IPListField(FieldListField): |
|---|
| | 4132 | islist = 1 |
|---|
| | 4133 | def __init__(self, name, default, fld, shift=0): |
|---|
| | 4134 | self.name = name |
|---|
| | 4135 | self.default = default |
|---|
| | 4136 | self.fld = fld |
|---|
| | 4137 | self.shift=shift |
|---|
| | 4138 | |
|---|
| | 4139 | def i2repr(self,pkt,x): |
|---|
| | 4140 | s = [] |
|---|
| | 4141 | if x == None: |
|---|
| | 4142 | return "[]" |
|---|
| | 4143 | for y in x: |
|---|
| | 4144 | s.append('%s' % y) |
|---|
| | 4145 | return "[ %s ]" % (", ".join(s)) |
|---|
| | 4146 | |
|---|
| | 4147 | def addfield(self, pkt, s, val): |
|---|
| | 4148 | val = self.i2m(pkt, val) |
|---|
| | 4149 | return s + "".join(map(lambda x: socket.inet_pton(socket.AF_INET, x), val)) |
|---|
| | 4150 | |
|---|
| | 4151 | def getfield(self, pkt, s): |
|---|
| | 4152 | l = getattr(pkt, self.fld) |
|---|
| | 4153 | l -= self.shift |
|---|
| | 4154 | val = [] |
|---|
| | 4155 | for i in range(l): |
|---|
| | 4156 | s,v = s[4:], socket.inet_ntop(socket.AF_INET, s[:4]) |
|---|
| | 4157 | val.append(v) |
|---|
| | 4158 | return s, val |
|---|
| | 4159 | |
|---|
| | 4160 | |
|---|
| | 7104 | class VRRP(Packet): |
|---|
| | 7105 | name = "VRRP" |
|---|
| | 7106 | fields_desc = [ |
|---|
| | 7107 | BitField("version" , 2, 4), |
|---|
| | 7108 | BitField("type" , 1, 4), |
|---|
| | 7109 | ByteField("vrid", 1), |
|---|
| | 7110 | ByteField("priority", 100), |
|---|
| | 7111 | FieldLenField("ipcount",None,"addrlist","B"), |
|---|
| | 7112 | ByteField("authtype", 0), |
|---|
| | 7113 | ByteField("adv", 1), |
|---|
| | 7114 | XShortField("chksum", None), |
|---|
| | 7115 | IPListField("addrlist", None, "ipcount"), |
|---|
| | 7116 | IntField("auth1", 0), |
|---|
| | 7117 | IntField("auth2", 0) ] |
|---|
| | 7118 | |
|---|
| | 7119 | def post_build(self, p, pay): |
|---|
| | 7120 | if self.chksum is None: |
|---|
| | 7121 | ck = checksum(p) |
|---|
| | 7122 | p = p[:6]+chr(ck>>8)+chr(ck&0xff)+p[8:] |
|---|
| | 7123 | return p + pay |
|---|
| | 7124 | |
|---|
| | 7125 | |
|---|