Basic Python
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
list(xrange()) == range() --> Στην python3 το range είναι το xrange της python2 (δεν είναι λίστα αλλά γεννήτρια) Η διαφορά μεταξύ ενός Tuple και μιας List είναι ότι η θέση μιας τιμής σε ένα tuple της δίνει νόημα, ενώ οι λίστες είναι απλώς ταξινομημένες τιμές. Τα tuples έχουν δομές αλλά οι λίστες έχουν μια σειρά.
To raise a number you use: 3**2 (not 3^2) If you do 2/3 it returns 1 because you are dividing two ints (integers). If you want decimals you should divide floats (2.0/3.0). i >= j i <= j i == j i != j a and b a or b not a float(a) int(a) str(d) ord("A") = 65 chr(65) = 'A' hex(100) = '0x64' hex(100)[2:] = '64' isinstance(1, int) = True "a b".split(" ") = ['a', 'b'] " ".join(['a', 'b']) = "a b" "abcdef".startswith("ab") = True "abcdef".contains("abc") = True "abc\n".strip() = "abc" "apbc".replace("p","") = "abc" dir(str) = List of all the available methods help(str) = Definition of the class str "a".upper() = "A" "A".lower() = "a" "abc".capitalize() = "Abc" sum([1,2,3]) = 6 sorted([1,43,5,3,21,4])
Join chars 3 * ’a’ = ‘aaa’ ‘a’ + ‘b’ = ‘ab’ ‘a’ + str(3) = ‘a3’ [1,2,3]+[4,5]=[1,2,3,4,5]
Parts of a list ‘abc’[0] = ‘a’ 'abc’[-1] = ‘c’ 'abc’[1:3] = ‘bc’ από [1] έως [2] "qwertyuiop"[:-1] = 'qwertyuio'
Comments # One line comment """ Several lines comment Another one """
Loops
t1 = (1,'2,'three') t2 = (5,6) t3 = t1 + t2 = (1, '2', 'three', 5, 6) (4,) = Singelton d = () κενό tuple d += (4,) --> Προσθήκη σε ένα tuple CANT! --> t1[1] == 'New value' list(t2) = [5,6] --> Από tuple σε λίστα
d = [] κενό a = [1,2,3] b = [4,5] a + b = [1,2,3,4,5] b.append(6) = [4,5,6] tuple(a) = (1,2,3) --> Από λίστα σε tuple
d = {} κενό monthNumbers={1:’Jan’, 2: ‘feb’,’feb’:2}—> monthNumbers ->{1:’Jan’, 2: ‘feb’,’feb’:2} monthNumbers[1] = ‘Jan’ monthNumbers[‘feb’] = 2 list(monthNumbers) = [1,2,’feb’] monthNumbers.values() = [‘Jan’,’feb’,2] keys = [k for k in monthNumbers] a={'9':9} monthNumbers.update(a) = {'9':9, 1:’Jan’, 2: ‘feb’,’feb’:2} mN = monthNumbers.copy() #Ανεξάρτητη αντιγραφή monthNumbers.get('key',0) #Έλεγχος αν υπάρχει το κλειδί, Επιστροφή της τιμής του monthNumbers["key"] ή 0 αν δεν υπάρχει
Στα σύνολα δεν υπάρχουν επαναλήψεις myset = set(['a', 'b']) = {'a', 'b'} myset.add('c') = {'a', 'b', 'c'} myset.add('a') = {'a', 'b', 'c'} #Χωρίς επαναλήψεις myset.update([1,2,3]) = set(['a', 1, 2, 'b', 'c', 3]) myset.discard(10) #Αν υπάρχει, αφαιρέστε το, αν όχι, τίποτα myset.remove(10) #Αν υπάρχει, αφαιρέστε το, αν όχι, ρίξτε εξαίρεση myset2 = set([1, 2, 3, 4]) myset.union(myset2) #Τιμές που είναι myset Ή myset2 myset.intersection(myset2) #Τιμές σε myset ΚΑΙ myset2 myset.difference(myset2) #Τιμές σε myset αλλά όχι σε myset2 myset.symmetric_difference(myset2) #Τιμές που δεν είναι σε myset ΚΑΙ myset2 (όχι και στα δύο) myset.pop() #Πάρτε το πρώτο στοιχείο του συνόλου και αφαιρέστε το myset.intersection_update(myset2) #myset = Στοιχεία και στα δύο myset και myset2 myset.difference_update(myset2) #myset = Στοιχεία σε myset αλλά όχι σε myset2 myset.symmetric_difference_update(myset2) #myset = Στοιχεία που δεν είναι και στα δύο
Η μέθοδος στο __It__ θα είναι αυτή που θα χρησιμοποιηθεί από το sort για να συγκρίνει αν ένα αντικείμενο αυτής της κλάσης είναι μεγαλύτερο από άλλο
Map είναι όπως: [f(x) for x in iterable] --> map(tutple,[a,b]) = [(1,2,3),(4,5)] m = map(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) --> [False, False, True, False, False, True, False, False, True]
zip σταματά όταν το πιο σύντομο από το foo ή το bar σταματά:
Lambda χρησιμοποιείται για να ορίσει μια συνάρτηση (lambda x,y: x+y)(5,3) = 8 --> Χρησιμοποιήστε το lambda ως απλή συνάρτηση sorted(range(-5,6), key=lambda x: x** 2) = [0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5] --> Χρησιμοποιήστε το lambda για να ταξινομήσετε μια λίστα m = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) = [3, 6, 9] --> Χρησιμοποιήστε το lambda για να φιλτράρετε reduce (lambda x,y: x*y, [1,2,3,4]) = 24
mult1 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x%3 == 0 ]
Αν η συνθήκη είναι ψευδής, η συμβολοσειρά θα εκτυπωθεί στην οθόνη.
Μια γεννήτρια, αντί να επιστρέφει κάτι, "παραδίδει" κάτι. Όταν την προσπελάσετε, θα "επιστρέψει" την πρώτη τιμή που δημιουργήθηκε, στη συνέχεια, μπορείτε να την προσπελάσετε ξανά και θα επιστρέψει την επόμενη τιμή που δημιουργήθηκε. Έτσι, όλες οι τιμές δεν δημιουργούνται ταυτόχρονα και μπορεί να σωθεί πολύ μνήμη χρησιμοποιώντας αυτό αντί για μια λίστα με όλες τις τιμές.
g = myGen(6) --> 6 next(g) --> 7 next(g) --> Σφάλμα
import re re.search("\w","hola").group() = "h" re.findall("\w","hola") = ['h', 'o', 'l', 'a'] re.findall("\w+(la)","hola caracola") = ['la', 'la']
Ειδικές σημασίες: . --> Όλα \w --> [a-zA-Z0-9_] \d --> Αριθμός \s --> Χαρακτήρας κενής θέσης[ \n\r\t\f] \S --> Μη κενός χαρακτήρας ^ --> Ξεκινά με $ --> Τελειώνει με + --> Ένα ή περισσότερα * --> 0 ή περισσότερα ? --> 0 ή 1 εμφανίσεις
Επιλογές: re.search(pat,str,re.IGNORECASE) IGNORECASE DOTALL --> Επιτρέπει την τελεία να ταιριάζει με νέα γραμμή MULTILINE --> Επιτρέπει το ^ και $ να ταιριάζουν σε διαφορετικές γραμμές
re.findall("<.*>", "<b>foo</b>and<i>so on</i>") = ['<b>foo</b>and<i>so on</i>'] re.findall("<.*?>", "<b>foo</b>and<i>so on</i>") = ['<b>', '</b>', '<i>', '</i>']
IterTools product from itertools import product --> Δημιουργεί συνδυασμούς μεταξύ 1 ή περισσότερων λιστών, ίσως επαναλαμβάνοντας τιμές, καρτεσιανός προϊόν (διανεμητική ιδιότητα) print list(product([1,2,3],[3,4])) = [(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)] print list(product([1,2,3],repeat = 2)) = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
permutations from itertools import permutations --> Δημιουργεί συνδυασμούς όλων των χαρακτήρων σε κάθε θέση print list(permutations(['1','2','3'])) = [('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'),... Κάθε πιθανός συνδυασμός print(list(permutations('123',2))) = [('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')] Κάθε πιθανός συνδυασμός μήκους 2
combinations from itertools import combinations --> Δημιουργεί όλους τους πιθανούς συνδυασμούς χωρίς επαναλαμβανόμενους χαρακτήρες (αν υπάρχει "ab", δεν δημιουργεί "ba") print(list(combinations('123',2))) --> [('1', '2'), ('1', '3'), ('2', '3')]
combinations_with_replacement from itertools import combinations_with_replacement --> Δημιουργεί όλους τους πιθανούς συνδυασμούς από τον χαρακτήρα και μετά (για παράδειγμα, ο 3ος είναι μίξη από τον 3ο και μετά αλλά όχι με τον 2ο ή τον πρώτο) print(list(combinations_with_replacement('1133',2))) = [('1', '1'), ('1', '1'), ('1', '3'), ('1', '3'), ('1', '1'), ('1', '3'), ('1', '3'), ('3', '3'), ('3', '3'), ('3', '3')]
Διακοσμητής που μετράει τον χρόνο που χρειάζεται μια συνάρτηση για να εκτελεστεί (από εδώ):
Αν το εκτελέσετε, θα δείτε κάτι σαν το παρακάτω:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)