Python ile basit vulnhub yazarlarını çeken bot

Daha önceden yazmış olduğum bu scripti bugün güncellemek zorunda kaldım.Nedeni vulnhub önceden her türlü bağlantıyı kabul etsede bugün etmiyordu.Bende scripte Chrome Dev Tools'dan kopyaladığım header bilgilerini çaktım script şimdi bağlantı kuruyordu fakat regex patterni boş olarak dönüyordu.İlk scriptte

urllib.request.urlopen(url).read()

şeklinde bir yapı vardı ve bu yapı response'u byte code olarak döndürüyordu.Byte code döndüren response içinde regex ile arama yapmak için basit bir harf argüman var hemen onu da göstereyim.

rp = re.findall(b'pattern',text)

şeklinde bir argüman ile bytecode olarak arama yapıyor fakat bu debug yaparken sorun nerde ? veya pattern neden bulmuyor şeklinde ki sorunlarınızı çözerken zorluk çıkartıyordu.Bende kodu bu yüzden güncelledim.

urllib yerine artık requests kullanıyorum.(Respect david beazley)

Neyse lafı fazla uzatmayalım. Sonuç görüntüsü aşağıdadır.

Vulnhub

Kodlar

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/python3
import requests,re
headers = {
':authority':'www.vulnhub.com',
':method':'GET',
#':path':'/?page=1'
':scheme':'https',
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'accept-encoding':'gzip, deflate, sdch, br',
'accept-language':'tr,en;q=0.8',
'cache-control':'max-age=0'
,'cookie':'__cfduid=db8361564d5291910653bb1219526d1051468106057; cf_clearance=bba81bf5ad85eef7974fd7ffe76cc5c022a83ca1-1468752269-2592000; _ga=GA1.2.1086152234.1468106055'
,'upgrade-insecure-requests':'1',
'user-agent' :'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36' }
liste = []
linkler = []
def getir(x):
    url = 'https://www.vulnhub.com/?page=%s' %x
    linkler.append(url)
def yazartopla(x):
    print("Acılan link : "+x) #debug için eklemiştim

    ac = requests.get(x,headers=headers).text ## Siteyi get metodu ile çekiyoruz ve içindeki textleri alıyoruz

    ac = re.findall('\/author\/(.*)\/',ac) # Text içinden /author/Arasındaki herşeyi alıyoruz/

    for i in ac:  # Tüm sayfadan arayıp liste şeklinde bir sonuç döndüğü için for döngüsüne sokup tek tek listeye ekliyoruz.

        if i in liste:
            pass
        else:
            liste.append(i)



def git(i):
    try: ### Hata yakalama blokları

        url = "https://www.vulnhub.com/author/"+i+"/"
        ac = requests.get(url,headers=headers).text

        name = re.findall('<li><b>Name<\/b>:(.*)<\/li>',ac)
        website = re.findall('<li><b>Website.*<a href="(.*)">',ac)
        contact = re.findall('<li><b>.*<\/b>: <a href=\"(.*)\">.*<\/a><\/li>',ac)
        series = re.findall('<a href="\/series\/.*\/">(.*)<\/a>',ac)
        if len(contact) == 2:

            author = {"İsim" : name,"Websitesi" : website,"İletişim" : contact[1],"Seriler" : series}
            dosyayaz(author)
        elif len(name) == 0:
            pass

        else:
            author = {"İsim" : name,"Websitesi" : website,"İletişim" : contact,"Seriler" : series}

            dosyayaz(author)
    except urllib.error.HTTPError: ## Eğer herhangi bir şekilde ulaşamazsa sayfaya hata var diye uyarı veriyor.Nedense break etmemişim
        print('Hata var')
def dosyayaz(x):
    x = str(x)
    ac = open('yazarlar.txt',mode="a")
    ac.write(x+"\n")
    ac.close()

for i in range(1,16):
    getir(i)

for i in linkler:
    yazartopla(i)

for i in liste:
    i = i
    git(i)