diff --git a/Makefile b/Makefile index 6eb4e77..0463ee7 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ setup: python3 -m venv .venv .venv/bin/pip install -r requirements.txt - mkdir data + mkdir -p data wget https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb -P data up: diff --git a/requirements.txt b/requirements.txt index 3798115..7ef50ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,4 @@ flask_wtf pysocks git+https://github.com/cdiv1e12/py-levin geoip2 +zmq \ No newline at end of file diff --git a/xmrnodes/app.py b/xmrnodes/app.py index 70a34ae..373272a 100644 --- a/xmrnodes/app.py +++ b/xmrnodes/app.py @@ -1,21 +1,18 @@ import json import re import logging -from os import makedirs from random import shuffle -from socket import gethostbyname_ex from datetime import datetime, timedelta import geoip2.database import arrow import requests -import click from flask import Flask, request, redirect, jsonify -from flask import render_template, flash, url_for +from flask import render_template, flash from urllib.parse import urlparse, urlencode from xmrnodes.helpers import determine_crypto, is_onion, make_request -from xmrnodes.helpers import retrieve_peers, rw_cache, get_highest_block +from xmrnodes.helpers import retrieve_peers, rw_cache, get_highest_block, check_zmq from xmrnodes.forms import SubmitNode from xmrnodes.models import Node, HealthCheck, Peer from xmrnodes import config @@ -163,6 +160,13 @@ def cleanup_health_checks(): print("Deleting check", check.id) check.delete_instance() +@app.cli.command("zmq") +def get_zmq(): + # nodes = Node.select().where(Node.validated == True) + # for node in nodes: + # check_zmq(node.url) + check_zmq('http://monero.10z.com.ar:18089') + @app.cli.command("check") def check(): cleanup_health_checks() diff --git a/xmrnodes/helpers.py b/xmrnodes/helpers.py index 8857d9f..4fdd933 100644 --- a/xmrnodes/helpers.py +++ b/xmrnodes/helpers.py @@ -1,10 +1,12 @@ import sys import socket import pickle +from time import sleep from os import path +import zmq from requests import get as r_get -from levin.section import Section +from urllib.parse import urlparse from levin.bucket import Bucket from levin.ctypes import * from levin.constants import LEVIN_SIGNATURE @@ -13,6 +15,29 @@ from xmrnodes.models import Node from xmrnodes import config +def check_zmq(url: str): + # print(url.split('://')) + node_socket = urlparse(url).netloc + node_url = node_socket.split(':')[0] + port = 18084 + tcp_node = f'tcp://{node_url}:{port}' + print('Checking ZMQ for node {}'.format(tcp_node)) + try: + ctx = zmq.Context() + subscriber = ctx.socket(zmq.SUB) + subscriber.setsockopt_string(zmq.SUBSCRIBE, '') + subscriber.setsockopt(zmq.CONFLATE, 1) + subscriber.connect(tcp_node) + # data = subscriber.recv() + count = 0 + while count < 5: + data = subscriber.recv_multipart() + count += 1 + print('success: {}'.format(data)) + ctx.term() + except Exception as e: + print(e) + def make_request(url: str, path="/get_info", data=None): headers = {"Origin": "https://monero.fail"} if is_onion(url):