Seite 1 von 1

Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 21:30
von progger
Hi Leute,

habe eine Problem und finde gerade nirgends eine Lösung. Die beiden unten stehenden Klassen, sind wie folgt definiert:
In der Klasse FuzzerAttributes(object): existiert eine Liste, die mit HttpPacket() Paketen befüllt wird, diese werden in einem Sniffer eingesetzt. Das passt auch alles soweit. Mein Problem ist, das wenn ich mir die Liste wieder zurückgeben lasse kann ich mit dem . Operator nicht mehr auf die Attribute zugreifen. (siehe unteren Code Abschnitt) Was mach ich falsch??
class HttpPacket(object):

def __init__(self):
self._method = ''
self._path = "/index.html"
self._get_query = ""
self._post_payload = ""
self._host = "localhost"
self._user_agent = ""

def __eq__(self, other):
return self._path == other._path and \
self._method == other._method and \
self._post_payload == other._post_payload and \
self._get_query == other._get_query


def setMethod(self, meth):
self._method = meth

def getMethod(self):
return self._method

def setPath(self, path):
self._path = path

def getPath(self):
return self._path

def setGET_Query(self, get):
self._get_query

def getGET_Query(self):
return self._get_query

def setPOST_Payload(self, post):
self._post_payload = post

def getPOST_Payload(self):
return self._post_payload

def setHost(self, host):
self._host = host

def getHost(self):
return self._host

def setUserAgent(self, agent):
self._user_agent = agent

def getUserAgent(self):
return self._user_agent


class FuzzerAttributes(object):

def __init__(self):
self._ip ="127.0.0.1"
self._port =9090
self._iface = 'lo'
self._catchedPackets = [] # HttpPacket List

number_of_packets = 0

def set_ip(self, ip):
self._ip = ip

def set_port(self, port):
self._port = port

def get_ip(self):
return self._ip

def get_port(self):
return self._port

def set_iface(self, iface):
self._iface = iface

def get_iface(self):
return self._iface

def add_HttpPacket(self, pck=HttpPacket):
self._catchedPackets.append(pck)
self.number_of_packets +=1

def get_HttpPacktList(self):
return self._catchedPackets
# ---------------------------------------------------------------


fuzz_attr = FuzzerAttributes()
l1 = HttpPacket()
l2 = HttpPacket()
l3 = HttpPacket()
fuzz_attr.add_HttpPacket(l1)
fuzz_attr.add_HttpPacket(l2)
fuzz_attr.add_HttpPacket(l3)

list = fuzz_attr.get_HttpPacktList()

for iter, i in list:
print "---------------------------------------"
print "Aktuell Pck:" + iter +"\n"
i. <---- # Attribute erscheinen nicht ?

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 21:48
von Sirius3
@progger: die ganzen »set_«- und »get_«-Methoden kannst Du ersatzlos löschen. Es ist viel einfacher direkt auf die Attribute zuzugreifen. Besser ist es auch, »HttpPacket« als NamedTuple zu definieren, also die Klasse unveränderbar zu machen. Instanzen sollten nach der Initialisierung fertig sein. Deine Instanzen sind aber nur mit dummy-Werten gefüllt. Dagegen sollte »number_of_packets« ein Property sein, das die Länge der Liste »catchedPackets« zurückgibt. Der Defaultwert bei »add_HttpPacket« ist ziemlich unsinnig. »list« ist ein schlechter Name weil er die eingebaute Klasse »list« überdeckt. Der Inhalt der Liste ist nicht in zwei Werte entpackbar. Was erwartest Du ist in »iter« oder »i«?

Code: Alles auswählen

from collections import namedtuple

HttpPacket = namedtuple("HttpPacket", "method, path, get_query, post_payload, host, user_agent")

class FuzzerAttributes(object):
    def __init__(self):
        self.ip = "127.0.0.1"
        self.port = 9090
        self.iface = 'lo'
        self.catched_packets = []       # HttpPacket List

    @property
    def number_of_packets(self):
        return len(self.catched_packets)

    def add_http_packet(self, pck):
        self.catchedPackets.append(pck)

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 21:59
von progger
Dank für die schelle Antwort,

nett auch für die Korrektur, aber teils hatte das schon auch Sinn, so sind die "dummy Werte" als default Werte gedacht. Diese können kann mit klassischen getter und setter bearbeitet werden. Aber das ist jetzt nicht der Punkt.
Die Liste ist auf jeden Fall mit den Objekten befüllt, da ich aber hauptsächlich mit C++ arbeite und ich hier wohl auf ein Problem stoße das durch fehlende Typisierung bzw. meine Unkenntniss auftritt weiß ich einfach nicht, wie ich an die Attribute (Variablen) der Listenobjekte rankommen.

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 22:10
von Sirius3
@progger: selbst in C++ würde man nicht so programmieren, aber wenn Du nicht Python programmieren willst, warum tust Du es dann?

Du bekommst schon in der Zeile mit for einen TypeError.

Code: Alles auswählen

for packet in fuzz_attr.catched_packets:
    print(packet.host)

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 22:28
von progger
Woran liegt das?

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 22:36
von Sirius3
Woran liegt was?

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 22:46
von progger
Ganz generell warum kann ich mir die Liste so wie ich es gemacht habe nicht verwenden bzw. dann die Objekte- bzw. deren Attribute nicht verwenden

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 23:12
von Sirius3
@progger: warum kann man Listen nicht zum Kaffeekochen benutzen? Wie willst Du denn Listen verwenden?

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Mittwoch 21. März 2018, 23:44
von progger
Ey was ist eigentlich dein Problem. Für was kommentierst du eigentlich mein Code wenn du hier nur Mist von dir gibst. Ich hatte eine einfache Frage, die Antwort darauf besteht vermutlich aus zwei Sätzen und statt jemandem weiter zu helfen der sich hier an das Forum wendet kommst du mir dumm.

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Donnerstag 22. März 2018, 00:14
von darktrym
Lies doch mal deinen Code und die erste Anwort.
Du packst Objekte in eine Liste und versuchst dann Tupel rauszuholen.
Und die anderen Fehler findest du dann auch noch.

Re: Objektattribute aus einer Liste sind nicht ansprechbar

Verfasst: Donnerstag 22. März 2018, 06:49
von progger
Danke für den sarkasmusfreien Hinweis!