./others/httpcheck.py

0.
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.
#!/usr/bin/python 
 
# Name: httpcheck 
# Version: 0.1 
# Author: intense2k 
# Description: scans a range of ips and checks results with a regular expression 
 
import sys 
import socket 
import httplib 
import re 
import Queue 
import thread 
import threading 
 
def convert_to_num(ip): 
    data = ip.split(".") 
    if len(data) != 4: 
        return -1 
 
    addr = 0 
    prod = 256 * 256 * 256 
    for i in range(0, 4): 
        data[i] = int(data[i]) 
        if data[i] < 0 or data[i] > 255: 
            return 
        addr = addr + prod * data[i] 
        prod = prod / 256 
 
    return addr 
 
def convert_to_ip(num): 
    tmp = num 
    quot = 256 * 256 * 256 
    ip = [] 
    for i in range(0, 4): 
        a = tmp % quot 
        b = (tmp - a) / quot 
        ip.append(str(b)) 
        quot = quot / 256 
        tmp = a 
    return '.'.join(ip) 
 
def httpcheck(host, filename, regex, timeout): 
    global log 
    socket.setdefaulttimeout(timeout) 
    try: 
        sockfd = httplib.HTTPConnection(host) 
        sockfd.request('GET', filename) 
        response = sockfd.getresponse() 
        data = response.read() 
        if re.compile(regex).search(data): 
            log.acquire() 
            print 'http://' + host + filename 
            log.release() 
    except: 
        pass 
    sockfd.close() 
 
def worker(): 
    global iplist 
    global filename 
    global regex 
 
    while True: 
        host = iplist.get() 
        httpcheck(host, filename, regex, 3) 
        iplist.task_done() 
 
def main(argv): 
    global iplist 
    global regex 
    global filename 
 
    print '\n httpcheck v0.1 - coded by intense2k' 
 
    if len(argv) < 6: 
        print ' Usage: ./httpcheck <start> <end> <threads> <filename> <regex>' 
        print ' e.g. : ./httpcheck 192.168.1.1 192.168.1.255 10 /bla.php (a|b)' 
        return 
 
    start = convert_to_num(argv[1]) 
    end = convert_to_num(argv[2]) 
    threads = int(argv[3]) 
    filename = argv[4] 
    regex = argv[5] 
 
    if threads < 1: 
        print ' Invalid value entered for <threads>' 
        return 
 
    if start == -1 or end == -1: 
        print ' Invalid IP range given, check your input!' 
        return 
 
    if start > end: 
        tmp = start 
        start = end 
        end = tmp 
 
    for i in range(0, threads): 
        t = threading.Thread(target = worker) 
        t.setDaemon(True) 
        t.start() 
 
    end = end + 1 
    for i in range(start, end): 
        ip = convert_to_ip(i) 
        iplist.put(ip) 
 
    iplist.join() 
 
log = thread.allocate_lock() 
iplist = Queue.Queue() 
filename = '' 
regex = '' 
 
if __name__ == '__main__': 
    main(sys.argv) 
 

Back