mirror of https://github.com/CIRCL/AIL-framework
				
				
				
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
| #!/usr/bin/env python3
 | |
| # -*-coding:UTF-8 -*
 | |
| 
 | |
| import socks
 | |
| import socket
 | |
| import urllib.request
 | |
| import io
 | |
| import gzip
 | |
| import base64
 | |
| import sys
 | |
| import tempfile
 | |
| 
 | |
| # Max size in Mb
 | |
| max_size = 5
 | |
| 
 | |
| def create_connection(address, timeout=None, source_address=None):
 | |
|     sock = socks.socksocket()
 | |
|     sock.connect(address)
 | |
|     return sock
 | |
| 
 | |
| 
 | |
| def get_page(url, torclient_host='127.0.0.1', torclient_port=9050):
 | |
| 
 | |
|     request = urllib.request.Request(url)
 | |
|     # UA of the Tor browser bundle
 | |
|     request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0')
 | |
|     return urllib.request.urlopen(request, timeout=5).read(max_size * 100000)
 | |
| 
 | |
| #FIXME don't work at all
 | |
| def makegzip64(s):
 | |
| 
 | |
|     out = io.BytesIO()
 | |
| 
 | |
|     with gzip.GzipFile(fileobj=out, mode='ab') as fo:
 | |
|         fo.write(base64.standard_b64encode(s))
 | |
| 
 | |
|     return out.getvalue()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 
 | |
|     if len(sys.argv) != 2:
 | |
|         print('usage:', 'tor_fetcher.py', 'URL (base64 encoded)')
 | |
|         exit(1)
 | |
| 
 | |
|     try:
 | |
|         url = base64.standard_b64decode(sys.argv[1]).decode('utf8')
 | |
|         print(url)
 | |
|     except:
 | |
|         print('unable to decode')
 | |
|         exit(1)
 | |
| 
 | |
|     torclient_host = '127.0.0.1'
 | |
|     torclient_port = 9050
 | |
|     # Setup Proxy
 | |
|     socks.set_default_proxy(socks.SOCKS5, torclient_host, torclient_port, True)
 | |
|     socket.socket = socks.socksocket
 | |
|     socket.create_connection = create_connection
 | |
| 
 | |
|     try:
 | |
|         page = get_page(url)
 | |
|     except:
 | |
|         print('unable to fetch')
 | |
|         exit(1)
 | |
| 
 | |
|     to_write = makegzip64(page)
 | |
|     t, path = tempfile.mkstemp()
 | |
|     #with open(path,  'w') as f:
 | |
|         #f.write(to_write)
 | |
|     print(path)
 | |
|     exit(0)
 |