robots.txt

Door Slurpgeit op dinsdag 02 juli 2013 00:23 - Reacties (12)
Categorie: -, Views: 6.224

Klein dumppostje tussendoor. Leek me eigenlijk wel een goed idee om een scriptje te maken wat automatisch de robots.txt van een website doorloopt om te kijken of er nog spannende pagina's tussen staan. Wie weet heeft iemand anders er nog wat aan ;). Overigens ben ik absoluut geen coder, dus verwacht een paar schoonheidsfoutjes.

https://dl.dropboxusercontent.com/u/7521450/blog/robots/2-7-2013%200-20-54.png


Python:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env python

#############################################
# GetRobots - Get titles for all            #
# robots.txt URI's.                         #
# Author: Slurpgeit                         #
# Github: https://github.com/Slurpgeit      #
#############################################

## Imports
import sys
import urllib2
import time
import socket

# Check for BeautifulSoup
try:
    from bs4 import BeautifulSoup
except:
    print 'Please install the BS4 python module.'
    sys.exit()

## Basic stuff
# The helptext
helptext = """\
==========\n\
GetRobots\n\
==========\n\
Usage: """ + sys.argv[0] + """ -u <url> <options>\n\
    -u <url>        The URL to use\n\
    -P <ip>:<port>        Use HTTP proxy\n\
    -t <timeout>        Timeout (Default is 1 second)
    -v            Verbose (Show HTTP errors)
    -h            Display this help\
"""

# See if URL is set
try:
    url = urllib2.unquote(sys.argv[sys.argv.index('-u') + 1])
    if ('http://' not in url) and ('https://' not in url):
        url = 'http://' + url
except:
    print helptext
    sys.exit()

# Check if URL resolves
try:
    rawurl = url.strip('http://')
    rawurl = url.strip('https://')
    socket.gethostbyname(rawurl)
except:
    print '\033[91m[-]\033[0m Could not revolve "' + url + '"'
    sys.exit()

# Parse command line
if ('-h' in sys.argv) or ('--help' in sys.argv):
    print helptext
    sys.exit()

if '-P' in sys.argv:
    proxyaddr = urllib2.unquote(sys.argv[sys.argv.index('-P') + 1])
    proxy = urllib2.ProxyHandler({'http': proxyaddr})
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)

if '-t' in sys.argv:
    timeout = int(urllib2.unquote(sys.argv[sys.argv.index('-t') + 1]))
else:
    timeout = 1

if '-v' in sys.argv:
    verbose = 1

## Functions
# Get all "Disallow: " lines
def getdisallow(url):
    disallow = []
    try:
        req = urllib2.urlopen(url + '/robots.txt')
        status = req.getcode()
        print '\033[92m[+]\033[0m ' + str(status) + ' | robots.txt'

    except Exception, error:
        try:
            print '\033[91m[-]\033[0m ' + str(error.code) + ' | robots.txt'
        except:
            print '\033[91m[-]\033[0m Error: ' + str(error)
        sys.exit()
    
    robots = req.readlines()
    for line in robots:
        if 'Disallow:' in line:
            if ('Disallow: /\n' not in line) and ('Disallow: /*\n' not in line):
                disallow.append(line)
    return disallow

# Get all URI titles
def getcontent(uri):
    for uri in uris:
        try:
            req = urllib2.urlopen(url + uri)
            status = str(req.getcode())
            html = BeautifulSoup(req)
            try:
                title = html.title.string
                title = title.strip('\n')
                title = title.strip('\t')
            except:
                title = 'No title'

            print '\033[92m[+]\033[0m ' + status + ' | ' + uri.rstrip() + ' | "' + title.rstrip() + '" | ' + url + uri.rstrip()
        except urllib2.URLError, error:
            try:
                if verbose:
                    print '\033[91m[-]\033[0m ' + str(error.code) + ' | ' + uri.rstrip()
            except:
                pass
        time.sleep(timeout)

## Running code
# Fill 'uris' array
uris = []
disallow = getdisallow(url)

if not disallow:
    print 'No "Disallow:" entries in robots.txt.'
else:
    for entry in disallow:
        entry = entry.strip('Disallow: ')
        uris.append(entry)

# Request all URI's
getcontent(uris)


https://github.com/Slurpg...ster/scripts/getrobots.py

Volgende: Droid in the middle 07-'13 Droid in the middle
Volgende: chpwn 02-'13 chpwn

Reacties


Door Tweakers user himlims_, dinsdag 02 juli 2013 08:03

Please install the BS4 python module.
- waar tover ik die vandaan?

[Reactie gewijzigd op dinsdag 02 juli 2013 08:04]


Door Tweakers user iThinkSo, dinsdag 02 juli 2013 08:35

http://spartanthe.blogspo...ulsoup-for-python-in.html
Daar, maar zelfs met die geinstalleerd klaagt 'ie nog...

Door Tweakers user Slurpgeit, dinsdag 02 juli 2013 10:22

Welk OS gebruiken jullie? In mijn ubuntu VM was het een kwestie van:

sudo apt-get install python-bs4

Door Tweakers user RoadRunner84, dinsdag 02 juli 2013 14:44

Of alternatief: maak een klein match stukje om de title uit een html file te vissen en gooi BS4 eruit :)

Door Tweakers user Comgenie, dinsdag 02 juli 2013 15:06

Vergeet trouwens niet dat er wat scripts zijn die automatisch IP bans uitdeelt als iemand een pagina bezoekt die alleen in een disallow regel te vinden zou zijn, meestal om te voorkomen dat er een overijverige search engine bot bezig gaat :P

Door Tweakers user Freekers, dinsdag 02 juli 2013 16:34

Comgenie schreef op dinsdag 02 juli 2013 @ 15:06:
Vergeet trouwens niet dat er wat scripts zijn die automatisch IP bans uitdeelt als iemand een pagina bezoekt die alleen in een disallow regel te vinden zou zijn, meestal om te voorkomen dat er een overijverige search engine bot bezig gaat :P
Inderdaad. Dit scriptje levert je o.a. op mijn server al vrij snel automatisch een IP ban op ;)

Door Tweakers user Slurpgeit, dinsdag 02 juli 2013 16:42

Mwah, als ik dit al gebruik is dit (meestal) met toestemming van de site owner ;).

Door Tweakers user AW_Bos, woensdag 03 juli 2013 18:05

Die van YouTube is wel geniaal:

http://youtube.com/robots.txt

Door Tweakers user hostler, woensdag 03 juli 2013 19:18

Bij die van Tweakers vind je zelfs World of Tweaking terug.
http://tweakers.net/wot


Leuk scriptje :) For learning purposes only, natuurlijk.

Door Tweakers user ik.ben.iemand., woensdag 03 juli 2013 20:36

@AW_Bos

Die van Google.com is nog veel beter :P

http://www.google.com/humans.txt

Ik ben het, van de *bliep tape :+

Door Tweakers user Chris7, zondag 07 juli 2013 18:45

ik.ben.iemand. schreef op woensdag 03 juli 2013 @ 20:36:
@AW_Bos

Die van Google.com is nog veel beter :P

http://www.google.com/humans.txt

Ik ben het, van de *bliep tape :+
Dat is geen robots.txt, maar dit: http://en.wikipedia.org/wiki/Humans.txt (zie ook http://humanstxt.org/).
Zie het tegenwoordig wel vaker, zit bv. ook standaard in HTML5 Boilerplate.

Door Tweakers user ik.ben.iemand., maandag 08 juli 2013 16:42

LOL, ik dacht dat het een grapje van Google was, maar het wordt dus vaker gebruikt :P :+ :Y)

Reageren is niet meer mogelijk