Ubuntu - trimite automat IP extern dacă se schimbă

Cle

Active Member
Registered
Full Member
Am încercat să trimit folosind setari gmail, Yahoo dar nu merge.
Pot trimite un fișier la o adresa externă sau ce alte opțiuni as avea?

Editare solutie:
Asta e soluția care a mers.
Pentru setare automata sau detalii How to install the noip2 on Ubuntu and run via systemd systemctl (noIP Dynamic Update Client)
E bună pentru că merge și dacă serverul e mutat la altă locatie.
 
Ultima editare:
La repornire cable modem, IP extern se schimba cam de fiecare data.
Pentru ca vreau access la server cu noul IP vreau un Shell sau ceva sa trimita fie un fisier sau un email cu noul IP.
Incercare am facut cu Send email with localhost on ubuntu with PHP (possible over external mail server)
 
Incerca asta:
Mai întâi, asigură-te că ai instalat pachetul smtplib pentru gestionarea trimiterii email-urilor prin Python și requests pentru a obține noul IP extern.

Poți crea un fișier script.py și adăuga următorul cod:

Cod:
import smtplib
import requests
import socket
import os

# Configurațiile pentru trimiterea email-ului
EMAIL_FROM = "[email protected]"
EMAIL_TO = "[email protected]"
EMAIL_PASSWORD = "parola_tale_email"

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def send_email(subject, body):
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(EMAIL_FROM, EMAIL_PASSWORD)

        msg = f"Subject: {subject}\n\n{body}"
        server.sendmail(EMAIL_FROM, EMAIL_TO, msg)

        print("Email trimis cu succes!")
    except Exception as e:
        print("Eroare la trimiterea email-ului:", e)
    finally:
        server.quit()

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Trimite email cu noul IP
        subject = "IP extern server actualizat"
        body = f"Noul IP extern al serverului este: {external_ip}"
        send_email(subject, body)

if __name__ == "__main__":
    main()
 
Incerca asta:
Mai întâi, asigură-te că ai instalat pachetul smtplib pentru gestionarea trimiterii email-urilor prin Python și requests pentru a obține noul IP extern.

Poți crea un fișier script.py și adăuga următorul cod:

Cod:
import smtplib
import requests
import socket
import os

# Configurațiile pentru trimiterea email-ului
EMAIL_FROM = "[email protected]"
EMAIL_TO = "[email protected]"
EMAIL_PASSWORD = "parola_tale_email"

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def send_email(subject, body):
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(EMAIL_FROM, EMAIL_PASSWORD)

        msg = f"Subject: {subject}\n\n{body}"
        server.sendmail(EMAIL_FROM, EMAIL_TO, msg)

        print("Email trimis cu succes!")
    except Exception as e:
        print("Eroare la trimiterea email-ului:", e)
    finally:
        server.quit()

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Trimite email cu noul IP
        subject = "IP extern server actualizat"
        body = f"Noul IP extern al serverului este: {external_ip}"
        send_email(subject, body)

if __name__ == "__main__":
    main()
Multumesc, dar nu ma lasa sa trimit prin gmail si nici prin yahoo. e un setting in securitate care nu il pot schimba.
Eroare la trimiterea email-ului: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 Check Gmail through other email platforms - Gmail Help s10-20020adfecca000000b003177f57e79esm2878732wro.88 - gsmtp')

Daca am un fisier pot cumva sa-l trimit la dropbox sau alta locatie de stocare?
 
Multumesc, dar nu ma lasa sa trimit prin gmail si nici prin yahoo. e un setting in securitate care nu il pot schimba.
Eroare la trimiterea email-ului: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 Check Gmail through other email platforms - Gmail Help s10-20020adfecca000000b003177f57e79esm2878732wro.88 - gsmtp')

Daca am un fisier pot cumva sa-l trimit la dropbox sau alta locatie de stocare?
AM gasit ceva, sa vedem daca merge. GitHub - andreafabrizi/Dropbox-Uploader: Dropbox Uploader is a BASH script which can be used to upload, download, list or delete files from Dropbox, an online file sharing, synchronization and backup service.
 
Pai trebuie sa pui n script adresa de email la care sa trimită mesaj, apoi email si parola la un email de pe care să trimite.

Ma gândeam ca ti-ai dat seama ca trebuie schimbat.

Uite pentru Google drive.
pip install pydrive dropbox

Cod:
import os
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import dropbox

# Configurări pentru serviciile de cloud
GOOGLE_DRIVE_FOLDER_ID = "ID-ul_folderului_de_pe_Google_Drive"
DROPBOX_ACCESS_TOKEN = "tokenul_tău_de_acces_dropbox"

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def upload_to_google_drive(file_path):
    gauth = GoogleAuth()
    gauth.LocalWebserverAuth()

    drive = GoogleDrive(gauth)

    file = drive.CreateFile({"title": "ip_external.txt", "parents": [{"id": GOOGLE_DRIVE_FOLDER_ID}]})
    file.SetContentFile(file_path)
    file.Upload()

    print("Fișierul a fost încărcat pe Google Drive!")

def upload_to_dropbox(file_path):
    dbx = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN)

    with open(file_path, "rb") as f:
        dbx.files_upload(f.read(), f"/ip_external.txt")

    print("Fișierul a fost încărcat pe Dropbox!")

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip.txt")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Încarcă fișierul pe Google Drive
        upload_to_google_drive(ip_file_path)

        # Încarcă fișierul pe Dropbox
        upload_to_dropbox(ip_file_path)

if __name__ == "__main__":
    main()


GOOGLE_DRIVE_FOLDER_ID cu ID-ul folderului în care dorești să încarci fișierul pe Google Drive. De asemenea, înlocuiește DROPBOX_ACCESS_TOKEN cu token-ul de acces pentru Dropbox, pe care îl poți obține creând o aplicație în consola de dezvoltator Dropbox.
 
Pai trebuie sa pui n script adresa de email la care sa trimită mesaj, apoi email si parola la un email de pe care să trimite.

Ma gândeam ca ti-ai dat seama ca trebuie schimbat.

Uite pentru Google drive.
pip install pydrive dropbox

Cod:
import os
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import dropbox

# Configurări pentru serviciile de cloud
GOOGLE_DRIVE_FOLDER_ID = "ID-ul_folderului_de_pe_Google_Drive"
DROPBOX_ACCESS_TOKEN = "tokenul_tău_de_acces_dropbox"

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def upload_to_google_drive(file_path):
    gauth = GoogleAuth()
    gauth.LocalWebserverAuth()

    drive = GoogleDrive(gauth)

    file = drive.CreateFile({"title": "ip_external.txt", "parents": [{"id": GOOGLE_DRIVE_FOLDER_ID}]})
    file.SetContentFile(file_path)
    file.Upload()

    print("Fișierul a fost încărcat pe Google Drive!")

def upload_to_dropbox(file_path):
    dbx = dropbox.Dropbox(DROPBOX_ACCESS_TOKEN)

    with open(file_path, "rb") as f:
        dbx.files_upload(f.read(), f"/ip_external.txt")

    print("Fișierul a fost încărcat pe Dropbox!")

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip.txt")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Încarcă fișierul pe Google Drive
        upload_to_google_drive(ip_file_path)

        # Încarcă fișierul pe Dropbox
        upload_to_dropbox(ip_file_path)

if __name__ == "__main__":
    main()


GOOGLE_DRIVE_FOLDER_ID cu ID-ul folderului în care dorești să încarci fișierul pe Google Drive. De asemenea, înlocuiește DROPBOX_ACCESS_TOKEN cu token-ul de acces pentru Dropbox, pe care îl poți obține creând o aplicație în consola de dezvoltator Dropbox.
Mersi. Mi-am dat seama si am schimbat email in .py dar google nu ma lasa. O sa incerc si ce ai trimis cu dropbox.
 
Mersi. Mi-am dat seama si am schimbat email in .py dar google nu ma lasa. O sa incerc si ce ai trimis cu dropbox.
Faci un fisier config.txt cu următoarele date
Cod:
[GoogleDrive]
client_id = YOUR_CLIENT_ID
client_secret = YOUR_CLIENT_SECRET

Uite codul actualizat care folosește datele de logare la drive.

Cod:
import os
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def upload_to_google_drive(file_path, gauth):
    drive = GoogleDrive(gauth)

    file = drive.CreateFile({"title": "ip_external.txt"})
    file.SetContentFile(file_path)
    file.Upload()

    print("Fișierul a fost încărcat pe Google Drive!")

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip.txt")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Citeste datele de autentificare din fisierul de configurare
        with open("config.txt") as config_file:
            config = {}
            for line in config_file:
                key, value = line.strip().split(" = ")
                config[key] = value

        # Autentificare Google Drive
        gauth = GoogleAuth()
        gauth.client_id = config["client_id"]
        gauth.client_secret = config["client_secret"]
        gauth.LocalWebserverAuth()

        # Încarcă fișierul pe Google Drive
        upload_to_google_drive(ip_file_path, gauth)

if __name__ == "__main__":
    main()
 
Faci un fisier config.txt cu următoarele date
Cod:
[GoogleDrive]
client_id = YOUR_CLIENT_ID
client_secret = YOUR_CLIENT_SECRET

Uite codul actualizat care folosește datele de logare la drive.

Cod:
import os
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def upload_to_google_drive(file_path, gauth):
    drive = GoogleDrive(gauth)

    file = drive.CreateFile({"title": "ip_external.txt"})
    file.SetContentFile(file_path)
    file.Upload()

    print("Fișierul a fost încărcat pe Google Drive!")

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip.txt")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Citeste datele de autentificare din fisierul de configurare
        with open("config.txt") as config_file:
            config = {}
            for line in config_file:
                key, value = line.strip().split(" = ")
                config[key] = value

        # Autentificare Google Drive
        gauth = GoogleAuth()
        gauth.client_id = config["client_id"]
        gauth.client_secret = config["client_secret"]
        gauth.LocalWebserverAuth()

        # Încarcă fișierul pe Google Drive
        upload_to_google_drive(ip_file_path, gauth)

if __name__ == "__main__":
    main()
Imi da ceva eroare
File "/home/gdriveip.py", line 49, in <module>
main()
File "/home/gdriveip.py", line 36, in main
key, value = line.strip().split(" = ")
ValueError: not enough values to unpack (expected 2, got 1)
 
Cod:
import os
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def upload_to_google_drive(file_path, gauth):
    drive = GoogleDrive(gauth)

    file = drive.CreateFile({"title": "ip_external.txt"})
    file.SetContentFile(file_path)
    file.Upload()

    print("Fișierul a fost încărcat pe Google Drive!")

def main():
    external_ip = get_external_ip()
    if external_ip:
        # Salvează IP-ul extern într-un fișier
        ip_file_path = os.path.expanduser("~/.external_ip.txt")
        with open(ip_file_path, "w") as f:
            f.write(external_ip)

        # Citeste datele de autentificare din fisierul de configurare
        config = {}
        with open("config.txt") as config_file:
            for line in config_file:
                key, value = line.strip().split("=")
                config[key.strip()] = value.strip()

        # Autentificare Google Drive
        gauth = GoogleAuth()
        gauth.client_id = config["client_id"]
        gauth.client_secret = config["client_secret"]
        gauth.LocalWebserverAuth()

        # Încarcă fișierul pe Google Drive
        upload_to_google_drive(ip_file_path, gauth)

if __name__ == "__main__":
    main()
 
Am comparat codurile. Nu e nici o diferenta.
Are dar e posible sa nu o vezi.
In fișierul config.txt vezi sa nu existe spatii înainte si dupa valoare.
cheie=valoare
 
Are dar e posible sa nu o vezi.
In fișierul config.txt vezi sa nu existe spatii înainte si dupa valoare.
cheie=valoare
Se poate. Am sters in config spatile dar eroare e aceeasi.

Pana la urma am vazut ca am pus [GoogleDrive] ca prima linie in config. Am scos-o si am rulat din nou.
Acum lipsesc autorizatii client_secrets.json, clientsecrets.py; auth.py; gauth.LocalWebserverAuth()....
 
Daca nu reușește opțiunea de mai sus, care cred ca este cea mai utilă pentru tine, poti testa opțiunea de mai jos.

Instalează dependențele
pip install yagmail

Ruleaza codul si nu uita sa schimbi datele din code

Cod:
import yagmail
import requests

# Configurații pentru trimiterea email-ului
EMAIL_FROM = "[email protected]"
EMAIL_PASSWORD = "parola_tale_email"
EMAIL_TO = "[email protected]"

def get_external_ip():
    try:
        response = requests.get("https://api64.ipify.org?format=json")
        data = response.json()
        return data["ip"]
    except Exception as e:
        print("Eroare la obținerea IP-ului extern:", e)
        return None

def send_email(subject, body):
    try:
        yag = yagmail.SMTP(EMAIL_FROM, EMAIL_PASSWORD)
        yag.send(EMAIL_TO, subject, body)
        print("Email trimis cu succes!")
    except Exception as e:
        print("Eroare la trimiterea email-ului:", e)

def main():
    external_ip = get_external_ip()
    if external_ip:
        subject = "IP extern server actualizat"
        body = f"Noul IP extern al serverului este: {external_ip}"
        send_email(subject, body)

if __name__ == "__main__":
    main()
 
Am adaugat si noip in ubuntu.
Sal, sa inteleg ca nu ai reusit ?!

Uite cum faci :
1- cont pe noip si un dns creat
2- mergi in router la wan apoi gasesti setari ddnn, noip
3 - adauga datele de logare de la cont si dns-ul creat

Restart router pentru test.

Acceseaza intotdeauna dns-ul creat.
 
Loading...
Back
Sus