You've already forked da-ddnsclient
Compare commits
3 Commits
e004c00496
...
890efc081a
| Author | SHA1 | Date | |
|---|---|---|---|
| 890efc081a | |||
| b35d50ac81 | |||
| e66646b14f |
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import socket
|
|
||||||
|
|
||||||
import click
|
import click
|
||||||
|
import click_config_file
|
||||||
import requests
|
import requests
|
||||||
|
import dns.resolver
|
||||||
import tldextract
|
import tldextract
|
||||||
|
|
||||||
from lib.directadmin import DirectAdminClient, DirectAdminClientException
|
from lib.directadmin import DirectAdminClient, DirectAdminClientException
|
||||||
@@ -29,12 +29,26 @@ def get_directadmin_client(url, username, password):
|
|||||||
password)
|
password)
|
||||||
|
|
||||||
|
|
||||||
|
def getipv6(hostname):
|
||||||
|
answers = dns.resolver.resolve(hostname, 'AAAA')
|
||||||
|
for ip in answers:
|
||||||
|
return str(ip).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def getipv4(hostname):
|
||||||
|
answers = dns.resolver.resolve(hostname, 'A')
|
||||||
|
for ip in answers:
|
||||||
|
return str(ip).strip()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@click.option('--hostname', required=False, help='The FQDN you wish to update for DynamicDNS on DirectAdmin server')
|
@click_config_file.configuration_option()
|
||||||
@click.option('--url', required=False, help='The FQDN to access DirectAdmin server e.g https://my.directadmin.com:2222')
|
@click.option('--hostname', help='The FQDN you wish to update for DynamicDNS on DirectAdmin server')
|
||||||
@click.option('--username', required=False, help='The username for your account on DirectAdmin server')
|
@click.option('--url', help='The FQDN to access DirectAdmin server e.g https://my.directadmin.com:2222')
|
||||||
@click.option('--password', required=False, help='The password for your account on DirectAdmin server')
|
@click.option('--username', help='The username for your account on DirectAdmin server')
|
||||||
def main(hostname, url, username, password):
|
@click.option('--password', help='The password for your account on DirectAdmin server')
|
||||||
|
def ddns_updater(hostname, url, username, password):
|
||||||
click.echo('Updating DNS for ' + hostname)
|
click.echo('Updating DNS for ' + hostname)
|
||||||
(directadmin_zone, directadmin_name) = get_zone_and_name(hostname)
|
(directadmin_zone, directadmin_name) = get_zone_and_name(hostname)
|
||||||
|
|
||||||
@@ -44,25 +58,43 @@ def main(hostname, url, username, password):
|
|||||||
except DirectAdminClientException as e:
|
except DirectAdminClientException as e:
|
||||||
click.echo(e)
|
click.echo(e)
|
||||||
exit(1)
|
exit(1)
|
||||||
current_ip = requests.get('https://icanhazip.com').text.strip()
|
current_ip4 = requests.get('http://icanhazip.com').text.strip()
|
||||||
hostname_resolves_to = socket.gethostbyname(hostname).strip()
|
# current_ip6 = requests.get('http://ip1.dynupdate6.no-ip.com').text.strip()
|
||||||
|
hostname_resolves_to_ip4 = getipv4(hostname)
|
||||||
|
# hostname_resolves_to_ip6 = getipv6(hostname)
|
||||||
|
|
||||||
click.echo("Current External IP: {}".format(current_ip))
|
click.echo("Current External IP: {}".format(current_ip4))
|
||||||
click.echo("Hostname resolves to: {}".format(hostname_resolves_to))
|
click.echo("Hostname resolves to: {}".format(hostname_resolves_to_ip4))
|
||||||
|
|
||||||
if current_ip != hostname_resolves_to:
|
# click.echo("Current External IP6: {}".format(current_ip6))
|
||||||
click.echo("Current IP has changed, updating...")
|
# click.echo("Hostname resolves to: {}".format(hostname_resolves_to_ip6))
|
||||||
|
|
||||||
|
if current_ip4 != hostname_resolves_to_ip4:
|
||||||
|
click.echo("Current V4 IP has changed, updating...")
|
||||||
try:
|
try:
|
||||||
response = da_client.update_dns_record(directadmin_zone,
|
response = da_client.update_dns_record(directadmin_zone,
|
||||||
"A",
|
"A",
|
||||||
directadmin_name,
|
directadmin_name,
|
||||||
hostname_resolves_to,
|
hostname_resolves_to_ip4,
|
||||||
current_ip, 30)
|
current_ip4, 30)
|
||||||
if int(response['error']) == 0:
|
if int(response['error']) == 0:
|
||||||
click.echo("Successfully updated A record for " + hostname)
|
click.echo("Successfully updated A record for " + hostname)
|
||||||
except DirectAdminClientException as e:
|
except DirectAdminClientException as e:
|
||||||
click.echo("Error updating A record: %s" % e)
|
click.echo("Error updating A record: %s" % e)
|
||||||
|
#
|
||||||
|
# if current_ip6 != hostname_resolves_to_ip6:
|
||||||
|
# click.echo("Current V6 IP has changed, updating...")
|
||||||
|
# try:
|
||||||
|
# response = da_client.update_dns_record(directadmin_zone,
|
||||||
|
# "AAAA",
|
||||||
|
# directadmin_name,
|
||||||
|
# hostname_resolves_to_ip6,
|
||||||
|
# current_ip6, 30)
|
||||||
|
# if int(response['error']) == 0:
|
||||||
|
# click.echo("Successfully updated AAAA record for " + hostname)
|
||||||
|
# except DirectAdminClientException as e:
|
||||||
|
# click.echo("Error updating AAAA record: %s" % e)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
ddns_updater()
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
certifi==2019.9.11
|
certifi==2019.9.11
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
Click==7.0
|
Click==7.0
|
||||||
|
click-config-file==0.6.0
|
||||||
|
dnspython==2.3.0
|
||||||
idna==2.8
|
idna==2.8
|
||||||
requests==2.22.0
|
requests==2.22.0
|
||||||
urllib3==1.25.6
|
urllib3==1.25.6
|
||||||
|
|||||||
Reference in New Issue
Block a user