Как создать пакет радиуса с помощью scapy.
class Radius(Packet):
name = "Radius"
fields_desc = [ ByteEnumField("code", 1, {1: "Access-Request",
2: "Access-Accept",
3: "Access-Reject",
4: "Accounting-Request",
5: "Accounting-Accept"} ),
ByteField("id", 0),
FieldLenField("len", None, "attributes", "H" , adjust= lambda pkt,x:len(x.value_pair)+20),
StrFixedLenField("authenticator","",16),
PacketListField("attributes", [], RadiusAttribute, length_from=lambda pkt:pkt.len-20) ]
class RadiusAttribute(Packet):
name = "Radius Attribute"
fields_desc = [
ByteEnumField("type",1,{ 1:"User-Name",
2:"User-Password",
3:"CHAP-Password",
4:"NAS-IP-Address",
5:"NAS-Port"}),
FieldLenField("len",None,"value","B", adjust=lambda pkt,x:x+2),
StrLenField("value",None,length_from= lambda pkt:pkt.len-2)]
Above are the two functions I need to use.
This is what I am trying to do..
def append_radius(self,name=None,packet_code=None,pkt_id=0,
lenth=None,pkt_type=0,val=None):
if lenth !=None:
lenth = int(lenth)
if packet_code == "ACCESS_REQUEST":
pkt_code= 1
elif packet_code == "ACCESS_ACCEPT":
pkt_code= 2
elif packet_code == "ACCESS_REJECT":
pkt_code= 3
elif packet_code == "ACCOUNTING_REQUEST":
pkt_code= 4
elif packet_code == "ACCOUNTING_RESPONSE":
pkt_code= 5
else :
pkt_code= 0
print "\nInvalid Radius packet type"
raise
try:
self.send_pkt[name] = self.send_pkt[name]/Radius(code=int(pkt_code),id=int(pkt_id),len=int(64))
except Exception:
print "\nError in appending radius Packet"
raise
print "\n appended radius header"
self.send_pkt[name].show()
Я вызываю функцию Radius (), которая, в свою очередь, вызывает функцию RadiusAttribute (), пакет формируется без пар значений атрибутов.Требуется ли добавить что-либо еще в аргумент вызова функции?или способ вызова функции необходимо изменить?