Создание Радиус Пакета - PullRequest
0 голосов
/ 26 ноября 2018

Как создать пакет радиуса с помощью 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 (), пакет формируется без пар значений атрибутов.Требуется ли добавить что-либо еще в аргумент вызова функции?или способ вызова функции необходимо изменить?

...