{"id":28900027,"url":"https://github.com/turnersoftware/ddns4me","last_synced_at":"2026-03-05T13:03:23.261Z","repository":{"id":74169116,"uuid":"332723990","full_name":"TurnerSoftware/DDNS4Me","owner":"TurnerSoftware","description":"A Dynamic DNS Command Line tool for use with Cloudflare","archived":false,"fork":false,"pushed_at":"2023-12-15T08:15:58.000Z","size":81,"stargazers_count":6,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-21T09:09:22.251Z","etag":null,"topics":["cloudflare","ddns","ddns-updater","dns"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TurnerSoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"Turnerj"}},"created_at":"2021-01-25T11:25:24.000Z","updated_at":"2023-10-18T01:44:09.000Z","dependencies_parsed_at":"2023-12-15T09:28:10.743Z","dependency_job_id":"90968b0a-585b-4021-a3b2-0e6e9a050658","html_url":"https://github.com/TurnerSoftware/DDNS4Me","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TurnerSoftware/DDNS4Me","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TurnerSoftware%2FDDNS4Me","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TurnerSoftware%2FDDNS4Me/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TurnerSoftware%2FDDNS4Me/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TurnerSoftware%2FDDNS4Me/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TurnerSoftware","download_url":"https://codeload.github.com/TurnerSoftware/DDNS4Me/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TurnerSoftware%2FDDNS4Me/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30127218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T12:40:50.676Z","status":"ssl_error","status_checked_at":"2026-03-05T12:39:32.209Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","ddns","ddns-updater","dns"],"created_at":"2025-06-21T09:09:14.452Z","updated_at":"2026-03-05T13:03:23.235Z","avatar_url":"https://github.com/TurnerSoftware.png","language":"C#","funding_links":["https://github.com/sponsors/Turnerj"],"categories":[],"sub_categories":[],"readme":"# DDNS4Me\n_A Dynamic DNS Command Line tool for use with Cloudflare_\n\n![Build](https://github.com/TurnerSoftware/DDNS4Me/workflows/Build/badge.svg)\n\n## Overview\n\nDDNS4Me is a basic CLI tool that allows updating of Cloudflare DNS \"A\" Records to reflect your current public IP address.\nIt utilises the Cloudflare API to perform the DNS updating and [a third-party service to identify your public IP address](#Public-IP-Address-Discovery).\n\n## Usage\n\n#### Common Usage\n\n```\nddns4me --auth-path cfauth.json --zone dac9630aec642a428cd73f4be0a03569 --name my.example.org\n```\n\n#### Using a custom IP provider\n\n```\nddns4me --auth-path cfauth.json --zone dac9630aec642a428cd73f4be0a03569 --name my.example.org --ip-provider https://echo.example.org\n```\n\n#### Using a custom TTL\n\n```\nddns4me --auth-path cfauth.json --zone dac9630aec642a428cd73f4be0a03569 --name my.example.org --ttl 360\n```\n\n## Command Line Arguments\n\n|Argument|Description|\n|-|-|\n|`--auth-path`|Required. Path to the authentication file that contains the [authentication details](#Authentication).|\n|`--zone`|Required. The Cloudflare Zone Identifier.|\n|`--name`|Required. The DNS name to use in the zone.|\n|`--ttl`|(Default: 120) The DNS record Time-to-Live (TTL) in seconds.|\n|`--ip-provider`|(Default: https://icanhazip.com/) URL for service that returns your public IP as plain text.|\n\n## Authentication\n\nDDNS4Me requires a Cloudflare API token which needs to be stored in a JSON file to avoid the token itself being stored in shell logs.\n\n```json\n{\n    \"CloudflareApiToken\": \"3706c7ce56fa785fe0e8e09c0c4bbacd\"\n}\n```\n\nTo create your own Cloudflare API token, head to your [account profile on Cloudflare](https://dash.cloudflare.com/profile) then to the API Tokens page.\nFrom there, you need to create a token with the `Edit zone DNS` permission which Cloudflare has a template for.\n\n![Cloudflare Create API Tokens page](docs/cloudflare-create-api-token.jpg)\n\n## Public IP Address Discovery\n\nThe third-party service for public IP addresses can be any service that returns your public IP as plain text from a HTTP request.\nBy default, DDNS4Me will use [icanhazip.com](https://icanhazip.com/) however you can specify your own via the `--ip-provider` command line argument.\n\nFor those that have privacy concerns or would like to control the IP provider themselves, it can be a straightforward task to make your own.\nThrough something like [Cloudflare Workers](https://workers.cloudflare.com/), available for free, you can build your own IP provider with code similar to this example:\n\n```javascript\naddEventListener('fetch', event =\u003e {\n  event.respondWith(handleRequest(event.request))\n})\n\n/**\n * Respond to the request\n * @param {Request} request\n */\nasync function handleRequest(request) {\n  return new Response(request.headers.get(\"cf-connecting-ip\"), {status: 200})\n}\n```\n\nIt is entirely possible to build your own in any language on any Internet-available service - whether that be [Azure Functions](https://azure.microsoft.com/en-us/services/functions/), [AWS Lambda](https://aws.amazon.com/lambda/) or some other hosting.\nThe only thing it needs to do is echo-back as plain text the IP address of the client that made the request.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturnersoftware%2Fddns4me","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fturnersoftware%2Fddns4me","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturnersoftware%2Fddns4me/lists"}