Advertisement
KekSec

Socks4/Socks5/HTTP Proxy Scanner

Jul 28th, 2018
8,005
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.82 KB | None | 0 0
  1. import socket
  2. import threading
  3. import random
  4. import itertools
  5. import socket
  6. import time
  7. import random
  8. import os
  9. import urllib2
  10.  
  11. global myip
  12. myip = urllib2.urlopen("http://icanhazip.com/").read()[:-1]
  13.  
  14. def isSocks5(ip, port):
  15.     try:
  16.         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17.         sock.settimeout(1)
  18.         sock.connect((ip, port))
  19.         sock.sendall("\x05\x01\x00")
  20.         data = sock.recv(2)
  21.         sock.close()
  22.         if(len(data)<2):
  23.             # Null response
  24.             return False
  25.         if data[0] != "\x05":
  26.             # Not socks5
  27.             return False
  28.         if data[1] != "\x00":
  29.             # Requires authentication
  30.             return False
  31.         return True
  32.     except:
  33.         return False
  34. def isSocks4(ip, port):
  35.     try:
  36.         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  37.         s.settimeout(1)
  38.         s.connect((ip, port))
  39.         ipaddr = socket.inet_aton(ip)
  40.         packet4 = "\x04\x01" + pack(">H",port) + ipaddr + "\x00"
  41.         socl.sendall(packet4)
  42.         data = sock.recv(8)
  43.         sock.close()
  44.         if(len(data)<2):
  45.             # Null response
  46.             return False
  47.         if data[0] != "\x00":
  48.             # Bad data
  49.             return False
  50.         if data[1] != "\x5A":
  51.             # Server returned an error
  52.             return False
  53.         return True
  54.     except:
  55.         return False
  56. def http(ip, port):
  57.     global myip
  58.     try:
  59.         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  60.         s.connect((ip, port))
  61.         s.settimeout(1)
  62.         s.send('''GET http://icanhazip.com/ HTTP/1.1
  63. Host: icanhazip.com
  64. User-Agent: curl/7.60.0
  65. Accept: */*
  66. X-Forwarded-For: ''' + ip + '''
  67. Proxy-Connection: Keep-Alive
  68.  
  69. ''')
  70.         response = s.recv(1024)
  71.         s.close()
  72.         if "200 OK" in response and "Location" not in response:
  73.             if response.split("\n")[-2] == ip or response.split("\n")[-2] == myip:
  74.                 return 1
  75.             else:
  76.                 return 0
  77.         else:
  78.             return 0
  79.     except socket.error:
  80.         return 0
  81.     except Exception as e:
  82.         print str(e)
  83.         return 0
  84.  
  85. def checkProxy(type, ip, port):
  86.     if type == "socks5":
  87.         if isSocks5(ip, port):
  88.             return 5
  89.     if type == "socks4":
  90.         if isSocks4(ip, port):
  91.             return 4
  92.     if type == "http":
  93.         if http(ip, port):
  94.             return 1
  95.     else:
  96.         return 0
  97.     return 0
  98.  
  99. def gen_IP():
  100.     not_valid = [10,127,169,172,192]
  101.     first = random.randrange(1,256)
  102.     while first in not_valid:
  103.         first = random.randrange(1,256)
  104.     ip = ".".join([str(first),str(random.randrange(1,256)),
  105.     str(random.randrange(1,256)),str(random.randrange(1,256))])
  106.     return ip
  107.  
  108. def gen_IP_block():
  109.     not_valid = [10,127,169,172,192]
  110.     first = 39
  111.     while first in not_valid:
  112.         first = random.randrange(1,256)
  113.     ip = ".".join([str(first),str(random.randrange(1,256)),
  114.     str(random.randrange(1,256))])
  115.     return ip+".0-255"
  116.  
  117. def ip_range(input_string):
  118.     octets = input_string.split('.')
  119.     chunks = [map(int, octet.split('-')) for octet in octets]
  120.     ranges = [range(c[0], c[1] + 1) if len(c) == 2 else c for c in chunks]
  121.  
  122.     for address in itertools.product(*ranges):
  123.         yield '.'.join(map(str, address))
  124.  
  125. def isOpen(IP, Port):
  126.     try:
  127.         s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  128.         s.settimeout(0.19)
  129.         result = s.connect_ex((IP, Port))
  130.         if result == 0:
  131.             s.close()
  132.             return True
  133.         s.close()
  134.     except:
  135.         return False
  136. def HaxThread(fh):
  137.     while 1:
  138.         try:
  139.             IP = gen_IP()
  140.             for Port in [80,1080,8080,3127,3128,3129]:
  141.                 if isOpen(IP, Port):
  142.                     proxy = IP + ":" + str(Port)
  143.                     working = False
  144.                     if checkProxy('socks5', IP, Port) == 5:
  145.                         print "SOCKS5 " + proxy
  146.                         working = True
  147.                     if checkProxy('socks4', IP, Port) == 4:
  148.                         print "SOCKS4 " + proxy
  149.                         working = True
  150.                     if checkProxy('http', IP, Port) == 1:
  151.                         print "HTTP " + proxy
  152.                         working = True
  153.                     if working:
  154.                         fh.write(proxy + "\n")
  155.                         fh.flush()
  156.         except Exception as e:
  157.             print str(e)
  158.             pass
  159.  
  160. fh = open("sockss.txt","a")
  161. threads = 1024
  162. threadcount = 0
  163. for i in xrange(0,threads):
  164.     try:
  165.         threading.Thread(target=HaxThread, args=(fh,)).start()
  166.         threadcount += 1
  167.     except:
  168.         pass
  169.  
  170. print "Scanned " + str(threadcount) + " scanner threads! Press enter three times to stop."
  171.  
  172. raw_input()
  173. os.kill(os.getpid(), 9)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement