add lookupdns.py
This commit is contained in:
parent
b0a18addb3
commit
71672da7af
13
README.md
13
README.md
@ -26,11 +26,16 @@ way of knowing when that script has finished doing its work. For this
|
|||||||
reason, the external script should execute at the end
|
reason, the external script should execute at the end
|
||||||
```console.log("__PHANTOM_PY_DONE__");``` when done. This will trigger
|
```console.log("__PHANTOM_PY_DONE__");``` when done. This will trigger
|
||||||
the PDF generation or the file saving, after which phantompy will exit.
|
the PDF generation or the file saving, after which phantompy will exit.
|
||||||
|
If you do not want to run any javascipt file, this trigger is provided
|
||||||
|
in the code by default.
|
||||||
|
|
||||||
It is important to remember that since you're just running WebKit, you can
|
It is important to remember that since you're just running WebKit, you can
|
||||||
use everything that WebKit supports, including the usual JS client
|
use everything that WebKit supports, including the usual JS client
|
||||||
libraries, CSS, CSS @media types, etc.
|
libraries, CSS, CSS @media types, etc.
|
||||||
|
|
||||||
|
Qt picks up proxies from the environment, so this will respect
|
||||||
|
```https_proxy``` or ```http_proxy``` if set.
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
* Python3
|
* Python3
|
||||||
@ -73,9 +78,11 @@ The standalone program is ```quash_phantompy.py```
|
|||||||
### Arguments
|
### Arguments
|
||||||
|
|
||||||
```
|
```
|
||||||
<url> Can be a http(s) URL or a path to a local file
|
--js_input (optional) Path and name of a JavaScript file to execute on the HTML
|
||||||
<pdf-file> Path and name of PDF file to generate
|
--html_output <html-file> (optional) Path a HTML output file to generate after JS is applied
|
||||||
[<javascript-file>] (optional) Path and name of a JavaScript file to execute
|
--pdf_output <pdf-file> (optional) Path and name of PDF file to generate after JS is applied
|
||||||
|
--log_level 10=debug 20=info 30=warn 40=error
|
||||||
|
html_or_url - required argument, a http(s) URL or a path to a local file.
|
||||||
```
|
```
|
||||||
Setting ```DEBUG=1``` in the environment will give debugging messages
|
Setting ```DEBUG=1``` in the environment will give debugging messages
|
||||||
on ```stderr```.
|
on ```stderr```.
|
||||||
|
79
lookupdns.py
Normal file
79
lookupdns.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/local/bin/python3.sh
|
||||||
|
# -*-mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*
|
||||||
|
|
||||||
|
# Looks for urls https://dns.google/resolve?
|
||||||
|
# and parses them to extract a magic field.
|
||||||
|
# https://dns.google/resolve?name=domain.name&type=TXT&cd=true&do=true
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
from phantompy import Render
|
||||||
|
|
||||||
|
global LOG
|
||||||
|
import logging
|
||||||
|
import warnings
|
||||||
|
warnings.filterwarnings('ignore')
|
||||||
|
LOG = logging.getLogger()
|
||||||
|
|
||||||
|
class LookFor(Render):
|
||||||
|
|
||||||
|
def __init__(self, app, do_print=True, do_save=False):
|
||||||
|
app.lfps = []
|
||||||
|
self._app = app
|
||||||
|
self.do_print = do_print
|
||||||
|
self.do_save = do_save
|
||||||
|
self.progress = 0
|
||||||
|
self.we_run_this_tor_relay = None
|
||||||
|
Render.__init__(self, app, do_print, do_save)
|
||||||
|
|
||||||
|
def _exit(self, val):
|
||||||
|
Render._exit(self, val)
|
||||||
|
self.percent = 100
|
||||||
|
LOG.debug(f"phantom.py: Exiting with val {val}")
|
||||||
|
i = self.uri.find('name=')
|
||||||
|
fp = self.uri[i+5:]
|
||||||
|
i = fp.find('.')
|
||||||
|
fp = fp[:i]
|
||||||
|
# threadsafe?
|
||||||
|
self._app.lfps.append(fp)
|
||||||
|
|
||||||
|
def _html_callback(self, *args):
|
||||||
|
"""print(self, QPrinter, Callable[[bool], None])"""
|
||||||
|
if type(args[0]) is str:
|
||||||
|
self._save(args[0])
|
||||||
|
i = self.ilookfor(args[0])
|
||||||
|
self._onConsoleMessage(i, "__PHANTOM_PY_SAVED__", 0 , '')
|
||||||
|
|
||||||
|
def ilookfor(self, html):
|
||||||
|
import json
|
||||||
|
marker = '<pre style="word-wrap: break-word; white-space: pre-wrap;">'
|
||||||
|
if marker not in html: return -1
|
||||||
|
i = html.find(marker) + len(marker)
|
||||||
|
html = html[i:]
|
||||||
|
assert html[0] == '{', html
|
||||||
|
i = html.find('</pre')
|
||||||
|
html = html[:i]
|
||||||
|
assert html[-1] == '}', html
|
||||||
|
LOG.debug(f"Found {len(html)} json")
|
||||||
|
o = json.loads(html)
|
||||||
|
if "Answer" not in o.keys() or type(o["Answer"]) != list:
|
||||||
|
LOG.warn(f"FAIL {self.uri}")
|
||||||
|
return 1
|
||||||
|
for elt in o["Answer"]:
|
||||||
|
assert type(elt) == dict, elt
|
||||||
|
assert 'type' in elt, elt
|
||||||
|
if elt['type'] != 16: continue
|
||||||
|
assert 'data' in elt, elt
|
||||||
|
if elt['data'] == 'we-run-this-tor-relay':
|
||||||
|
LOG.info(f"OK {self.uri}")
|
||||||
|
self.we_run_this_tor_relay = True
|
||||||
|
return 0
|
||||||
|
self.we_run_this_tor_relay = False
|
||||||
|
LOG.warn(f"BAD {self.uri}")
|
||||||
|
return 2
|
||||||
|
|
||||||
|
def _loadFinished(self, result):
|
||||||
|
LOG.debug(f"phantom.py: Loading finished {self.uri}")
|
||||||
|
self.toHtml(self._html_callback)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user