Add ip_reporter.py
هذا الالتزام موجود في:
117
ip_reporter.py
Normal file
117
ip_reporter.py
Normal file
@@ -0,0 +1,117 @@
|
||||
# بسم الله الرحمن الرحيم
|
||||
|
||||
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
IP Reporter for Jetson Nano
|
||||
Sends IP address to API on startup
|
||||
"""
|
||||
|
||||
import socket
|
||||
import requests
|
||||
import time
|
||||
import logging
|
||||
from subprocess import check_output
|
||||
|
||||
# Configuration
|
||||
API_URL = "https://echo-ip-e46d95cfc953.hosted.ghaymah.systems" # Replace with your API endpoint
|
||||
DEVICE_ID = "jetson-nano-001" # Change to unique ID for your device
|
||||
RETRY_DELAY = 30 # seconds between retries
|
||||
MAX_RETRIES = 100
|
||||
|
||||
# Setup logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('/var/log/ip_reporter.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
|
||||
def get_ip_address():
|
||||
"""Get the IP address of the device"""
|
||||
try:
|
||||
# Get IP using hostname command
|
||||
ip_output = check_output(['hostname', '-I']).decode('utf-8').strip()
|
||||
ips = ip_output.split()
|
||||
|
||||
if ips:
|
||||
# Return the first IP address (usually the main one)
|
||||
return ip_output
|
||||
else:
|
||||
return None
|
||||
except Exception as e:
|
||||
logging.error(f"Error getting IP address: {e}")
|
||||
return None
|
||||
|
||||
def is_internet_available():
|
||||
"""Check if internet connection is available"""
|
||||
try:
|
||||
# Try to connect to a reliable server
|
||||
socket.create_connection(("8.8.8.8", 53), timeout=5)
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
def send_to_api(ip_address):
|
||||
"""Send IP address to the API"""
|
||||
payload = {
|
||||
'device_id': DEVICE_ID,
|
||||
'ip_address': ip_address,
|
||||
'timestamp': time.time()
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(API_URL, json=payload, timeout=10)
|
||||
if response.status_code == 200:
|
||||
logging.info(f"Successfully sent IP {ip_address} to API")
|
||||
return True
|
||||
else:
|
||||
logging.error(f"API returned status code: {response.status_code}")
|
||||
return False
|
||||
except requests.exceptions.RequestException as e:
|
||||
logging.error(f"Error sending to API: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""Main function"""
|
||||
logging.info("IP Reporter started")
|
||||
|
||||
retries = 0
|
||||
ip_sent = False
|
||||
|
||||
while not ip_sent and retries < MAX_RETRIES:
|
||||
# Wait for internet connection
|
||||
if not is_internet_available():
|
||||
logging.info("Internet not available, waiting...")
|
||||
time.sleep(RETRY_DELAY)
|
||||
retries += 1
|
||||
continue
|
||||
|
||||
# Get IP address
|
||||
ip_address = get_ip_address()
|
||||
|
||||
if ip_address:
|
||||
logging.info(f"Found IP address: {ip_address}")
|
||||
|
||||
# Send to API
|
||||
if send_to_api(ip_address):
|
||||
ip_sent = True
|
||||
logging.info("IP address successfully reported to API")
|
||||
break
|
||||
else:
|
||||
logging.warning("Failed to send IP to API, retrying...")
|
||||
else:
|
||||
logging.warning("Could not get IP address, retrying...")
|
||||
|
||||
time.sleep(RETRY_DELAY)
|
||||
retries += 1
|
||||
|
||||
if not ip_sent:
|
||||
logging.error("Failed to send IP address after maximum retries")
|
||||
|
||||
logging.info("IP Reporter finished")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
المرجع في مشكلة جديدة
حظر مستخدم