🏡 index : github.com/captn3m0/tld-a-record.git

author Nemo <commits@captnemo.in> 2022-01-11 20:45:51.0 +05:30:00
committer Nemo <commits@captnemo.in> 2022-01-11 21:13:07.0 +05:30:00
commit
e3fc0a0d7b650db6304011fe6e813e22b93f03c9 [patch]
tree
0ad5f5059bd72483d4b87b4f6986f9e7a1c7bba4
parent
3cf692133150899382b35594c98213c02f8e7558
download
e3fc0a0d7b650db6304011fe6e813e22b93f03c9.tar.gz

New script



Diff

 .gitignore           |  8 ++++++++
 .travis.yml          | 22 ++++++++++------------
 README.md            |  2 +-
 footer.md            |  6 ++++++
 index.md             |  6 ++++++
 requirements.txt     |  1 +
 scan.sh              | 32 +++++++++++++++++++++-----------
 script.py            | 43 +++++++++++++++++++++++++++++++++++++++++++
 template.md          |  6 ------
 website/Gemfile.lock | 62 ++++++++++++++++++++++++++++++++++++++++++--------------------
 10 files changed, 124 insertions(+), 64 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6787d47..122b618 100644
--- a/.gitignore
+++ a/.gitignore
@@ -1,2 +1,10 @@
tlds.txt
deploy-key

tld/*.txt
whois/*.txt
.idea/
__pypackages__
.pdm.toml
website/root.zone.txt
template.md
diff --git a/.travis.yml b/.travis.yml
index 459cda2..23bdbd8 100644
--- a/.travis.yml
+++ a/.travis.yml
@@ -1,16 +1,17 @@
language: ruby
env:
  global:
  - GIT_REMOTE: git@github.com:captn3m0/tld-a-record.git
    - GIT_REMOTE: git@github.com:captn3m0/tld-a-record.git
addons:
  apt:
    packages:
    # required to avoid SSL errors
    - libcurl4-openssl-dev
    - dnsutils
    - idn
      # required to avoid SSL errors
      - libcurl4-openssl-dev
      - dnsutils
      - idn
      - python3-dnspython
rvm:
- 2.6.3
  - 3.0
before_install:
  - openssl aes-256-cbc -K $encrypted_9e883639804e_key -iv $encrypted_9e883639804e_iv -in deploy-key.enc -out deploy-key -d
  - chmod 600 deploy-key
@@ -22,15 +23,10 @@
  - gem update --system
  - gem install bundler
script:
  - wget "https://data.iana.org/TLD/tlds-alpha-by-domain.txt" --output-document tlds.txt
  - ./scan.sh
  - curl 'https://ipapi.co/yaml/' > website/_data/ip.json
  - echo "This scan was last run on $(date)" >> template.md
  - cp tlds.txt website/
  - cp template.md website/index.md
  - ./ci.sh
# branch whitelist, only for GitHub Pages
branches:
  except:
  # gh-pages is automatically committed
  - gh-pages
    # gh-pages is automatically committed
    - gh-pages
diff --git a/README.md b/README.md
index 7eec52d..a44b214 100644
--- a/README.md
+++ a/README.md
@@ -1,4 +1,4 @@
# tld-a-record
# tld-a-record [![pdm-managed](https://img.shields.io/badge/pdm-managed-blueviolet)](https://pdm.fming.dev)

Build scripts that maintain https://captnemo.in/tld-a-record/, which is a list of all TLDs with A records. Builds once-every-night.

diff --git a/footer.md b/footer.md
new file mode 100644
index 0000000..6941230 100644
--- /dev/null
+++ a/footer.md
@@ -1,0 +1,6 @@
As of the time of scan:

- [List of all TLDs](tlds.txt) (source: <https://data.iana.org/TLD/tlds-alpha-by-domain.txt>)
- [root.zone file](root.zone.txt) (source: <https://www.internic.net/domain/root.zone>)


diff --git a/index.md b/index.md
new file mode 100644
index 0000000..dcba2e9 100644
--- /dev/null
+++ a/index.md
@@ -1,0 +1,6 @@
---

layout: home
---


domain|punycode|whois|records
------|--------|----|-----
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..90ec607 100644
--- /dev/null
+++ a/requirements.txt
@@ -1,0 +1,1 @@
dnspython==2.1.0
diff --git a/scan.sh b/scan.sh
index 2591287..dd09360 100755
--- a/scan.sh
+++ a/scan.sh
@@ -7,20 +7,24 @@
# the scan was run (might be relevant for DNS lookups) into
# `website/_data/ip.json`. Structure is at ipapi.co

for domain in $(grep -v '^#' tlds.txt); do
    RESULT=$(dig +time=1 +tries=1 +short "$domain." | head -c -1 | tr '\n' '@' | sed 's/@/`,`/g' | grep -v "connection timed out")
    if [ ! -z "$RESULT" ]; then
        echo $domain
        DOMAIN_REAL="$domain"
        # Very crude regex for punycode domains
        if [[ $(echo "$domain" | grep -E  "^XN--[[:upper:]]+$") ]]; then
            DOMAIN_REAL=$(idn --idna-to-unicode "$domain")
        fi
        echo "|$DOMAIN_REAL|$domain|[http](http://$domain)|[https](https://$domain)|\`$RESULT\`|" >> template.md
# A complete text of each TLD is kept inside "tld/$domain.txt"

wget "https://data.iana.org/TLD/tlds-alpha-by-domain.txt" --output-document website/tlds.txt
wget 'https://ipapi.co/yaml/' --output-document website/_data/ip.json
wget https://www.internic.net/domain/root.zone --output-document website/root.zone.txt
mkdir tld whois

for domain in $(grep -v '^#' website/tlds.txt); do
    DOMAIN_REAL="$domain"
    # Very crude regex for punycode domains
    if [[ $(echo "$domain" | grep -E  "^XN--[[:upper:]]+$") ]]; then
        DOMAIN_REAL=$(idn --idna-to-unicode "$domain")
    fi
    python script.py "$domain." | sort > "tld/$domain.txt"
    whois "$domain." > "whois/$domain.txt"
    echo "$DOMAIN_REAL|$domain|[whois](whois/$domain.txt)|[dns](tld/$domain.txt)" >> template.md
done

curl 'https://ipapi.co/yaml/' > website/_data/ip.json

echo >> template.md
echo "This scan was last run on $(date)" >> template.md
echo "This scan was last run on $(date)" >> footer.md
cat index.md footer.md > website/index.md
cp -r whois tld website/
diff --git a/script.py b/script.py
new file mode 100644
index 0000000..38b69c0 100644
--- /dev/null
+++ a/script.py
@@ -1,0 +1,43 @@
import dns.resolver
import sys

# Make sure you have dnspython installed

name = sys.argv[1]
for qtype in [
    "A",
    "AAAA",
    "APL",
    "CAA",
    "CDNSKEY",
    "CDS",
    "CERT",
    "CNAME",
    "CSYNC",
    "DLV",
    "DNAME",
    "DNSKEY",
    "DS",
    "HTTPS",
    "IPSECKEY",
    "KEY",
    "LOC",
    "MX",
    "NS",
    "OPENPGPKEY",
    "PTR",
    "RP",
    "RRSIG",
    "SMIMEA",
    "SOA",
    "SRV",
    "SSHFP",
    "SVCB",
    "TA",
    "TLSA",
    "TXT",
    "URI",
]:
    answer = dns.resolver.resolve(name, qtype, raise_on_no_answer=False)
    if answer.rrset is not None:
        print(answer.rrset)
diff --git a/template.md b/template.md
deleted file mode 100644
index 83b545d..0000000 100644
--- a/template.md
+++ /dev/null
@@ -1,6 +1,0 @@
---

layout: home
---


|domain|punycode|http|https|lookup|
|------|--------|----|-----|------|
diff --git a/website/Gemfile.lock b/website/Gemfile.lock
index 40244ea..fdf4cd4 100644
--- a/website/Gemfile.lock
+++ a/website/Gemfile.lock
@@ -1,38 +1,40 @@
GEM
  remote: https://rubygems.org/
  specs:
    addressable (2.7.0)
    addressable (2.8.0)
      public_suffix (>= 2.0.2, < 5.0)
    colorator (1.1.0)
    concurrent-ruby (1.1.7)
    em-websocket (0.5.1)
    concurrent-ruby (1.1.9)
    em-websocket (0.5.3)
      eventmachine (>= 0.12.9)
      http_parser.rb (~> 0.6.0)
      http_parser.rb (~> 0)
    eventmachine (1.2.7)
    ffi (1.13.1)
    ffi (1.15.5)
    forwardable-extended (2.6.0)
    http_parser.rb (0.6.0)
    i18n (0.9.5)
    http_parser.rb (0.8.0)
    i18n (1.8.11)
      concurrent-ruby (~> 1.0)
    jekyll (3.9.0)
    jekyll (4.2.1)
      addressable (~> 2.4)
      colorator (~> 1.0)
      em-websocket (~> 0.5)
      i18n (~> 0.7)
      jekyll-sass-converter (~> 1.0)
      i18n (~> 1.0)
      jekyll-sass-converter (~> 2.0)
      jekyll-watch (~> 2.0)
      kramdown (>= 1.17, < 3)
      kramdown (~> 2.3)
      kramdown-parser-gfm (~> 1.0)
      liquid (~> 4.0)
      mercenary (~> 0.3.3)
      mercenary (~> 0.4.0)
      pathutil (~> 0.9)
      rouge (>= 1.7, < 4)
      rouge (~> 3.0)
      safe_yaml (~> 1.0)
    jekyll-sass-converter (1.5.2)
      sass (~> 3.4)
    jekyll-seo-tag (2.6.1)
      jekyll (>= 3.3, < 5.0)
    jekyll-theme-dinky (0.1.1)
      jekyll (~> 3.5)
      terminal-table (~> 2.0)
    jekyll-sass-converter (2.1.0)
      sassc (> 2.0.1, < 3.0)
    jekyll-seo-tag (2.7.1)
      jekyll (>= 3.8, < 5.0)
    jekyll-theme-dinky (0.2.0)
      jekyll (> 3.5, < 5.0)
      jekyll-seo-tag (~> 2.0)
    jekyll-watch (2.2.1)
      listen (~> 3.0)
@@ -41,24 +43,24 @@
    kramdown-parser-gfm (1.1.0)
      kramdown (~> 2.0)
    liquid (4.0.3)
    listen (3.2.1)
    listen (3.7.0)
      rb-fsevent (~> 0.10, >= 0.10.3)
      rb-inotify (~> 0.9, >= 0.9.10)
    mercenary (0.3.6)
    mercenary (0.4.0)
    pathutil (0.16.2)
      forwardable-extended (~> 2.6)
    public_suffix (4.0.5)
    rb-fsevent (0.10.4)
    public_suffix (4.0.6)
    rb-fsevent (0.11.0)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    rexml (3.2.5)
    rouge (3.22.0)
    rouge (3.27.0)
    safe_yaml (1.0.5)
    sass (3.7.4)
      sass-listen (~> 4.0.0)
    sass-listen (4.0.0)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
    sassc (2.4.0)
      ffi (~> 1.9)
    terminal-table (2.0.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    unicode-display_width (1.8.0)

PLATFORMS
  ruby
@@ -69,4 +71,4 @@
  kramdown-parser-gfm

BUNDLED WITH
   2.1.4
   2.2.26