dns success 11s
- Current runner version: 'v0.5.0'
- GITHUB_TOKEN Permissions
- Contents: read
- Metadata: read
- Packages: read
- Secret source: Actions
- Cache mode: write
- Prepare workflow directory
- Prepare all required actions
- Complete job name: dns
- Run cat > /tmp/probe.py <<'EOF'
- <U+001B>[36;1mcat > /tmp/probe.py <<'EOF'<U+001B>[0m
- <U+001B>[36;1mimport random, socket, struct, time<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mNS = ("10.200.0.1", 53)<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mdef query(name, qtype, edns):<U+001B>[0m
- <U+001B>[36;1m qid = random.randint(0, 65535)<U+001B>[0m
- <U+001B>[36;1m q = struct.pack(">HHHHHH", qid, 0x0100, 1, 0, 0, 1 if edns else 0)<U+001B>[0m
- <U+001B>[36;1m for label in name.split("."):<U+001B>[0m
- <U+001B>[36;1m q += bytes([len(label)]) + label.encode()<U+001B>[0m
- <U+001B>[36;1m q += b"\x00" + struct.pack(">HH", qtype, 1)<U+001B>[0m
- <U+001B>[36;1m if edns:<U+001B>[0m
- <U+001B>[36;1m q += b"\x00" + struct.pack(">HHIH", 41, edns, 0, 0)<U+001B>[0m
- <U+001B>[36;1m return q<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mdef show(tag, r, t):<U+001B>[0m
- <U+001B>[36;1m flags, an = struct.unpack(">H", r[2:4])[0], struct.unpack(">H", r[6:8])[0]<U+001B>[0m
- <U+001B>[36;1m print(f"{tag}: {len(r)} bytes, rcode={flags & 0xF}, tc={(flags >> 9) & 1}, answers={an}, {t:.0f} ms")<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mdef udp(name, qtype, edns):<U+001B>[0m
- <U+001B>[36;1m s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)<U+001B>[0m
- <U+001B>[36;1m s.settimeout(4)<U+001B>[0m
- <U+001B>[36;1m t = time.time()<U+001B>[0m
- <U+001B>[36;1m s.sendto(query(name, qtype, edns), NS)<U+001B>[0m
- <U+001B>[36;1m try:<U+001B>[0m
- <U+001B>[36;1m show(f"udp {name} type={qtype} edns={edns}", s.recv(65535), (time.time() - t) * 1000)<U+001B>[0m
- <U+001B>[36;1m except Exception as e:<U+001B>[0m
- <U+001B>[36;1m print(f"udp {name} type={qtype} edns={edns}: {e!r}")<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mdef tcp(name, qtype):<U+001B>[0m
- <U+001B>[36;1m q = query(name, qtype, 0)<U+001B>[0m
- <U+001B>[36;1m s = socket.create_connection(NS, timeout=4)<U+001B>[0m
- <U+001B>[36;1m t = time.time()<U+001B>[0m
- <U+001B>[36;1m s.sendall(struct.pack(">H", len(q)) + q)<U+001B>[0m
- <U+001B>[36;1m try:<U+001B>[0m
- <U+001B>[36;1m n = struct.unpack(">H", s.recv(2))[0]<U+001B>[0m
- <U+001B>[36;1m r = b""<U+001B>[0m
- <U+001B>[36;1m while len(r) < n:<U+001B>[0m
- <U+001B>[36;1m r += s.recv(n - len(r))<U+001B>[0m
- <U+001B>[36;1m show(f"tcp {name} type={qtype}", r, (time.time() - t) * 1000)<U+001B>[0m
- <U+001B>[36;1m except Exception as e:<U+001B>[0m
- <U+001B>[36;1m print(f"tcp {name} type={qtype}: {e!r}")<U+001B>[0m
- <U+001B>[36;1m<U+001B>[0m
- <U+001B>[36;1mfor name in ["storage.googleapis.com", "cdn.playwright.dev", "github.com"]:<U+001B>[0m
- <U+001B>[36;1m for qtype in (1, 28):<U+001B>[0m
- <U+001B>[36;1m for edns in (0, 1232):<U+001B>[0m
- <U+001B>[36;1m udp(name, qtype, edns)<U+001B>[0m
- <U+001B>[36;1m tcp(name, 1)<U+001B>[0m
- <U+001B>[36;1mEOF<U+001B>[0m
- <U+001B>[36;1mpython3 /tmp/probe.py<U+001B>[0m
- <U+001B>[36;1mfor i in 1 2; do getent ahostsv4 storage.googleapis.com | head -1 || echo "getent failed"; done<U+001B>[0m
- <U+001B>[36;1mecho "options edns0" | sudo tee -a /etc/resolv.conf<U+001B>[0m
- <U+001B>[36;1mfor i in 1 2; do getent ahostsv4 storage.googleapis.com | head -1 || echo "getent failed"; done<U+001B>[0m
- shell: /usr/bin/bash -e {0}
- udp storage.googleapis.com type=1 edns=0: 12 bytes, rcode=2, tc=0, answers=0, 3001 ms
- udp storage.googleapis.com type=1 edns=1232: 291 bytes, rcode=0, tc=0, answers=15, 2 ms
- udp storage.googleapis.com type=28 edns=0: 152 bytes, rcode=0, tc=0, answers=4, 1 ms
- udp storage.googleapis.com type=28 edns=1232: 163 bytes, rcode=0, tc=0, answers=4, 1 ms
- tcp storage.googleapis.com type=1: 280 bytes, rcode=0, tc=0, answers=15, 4 ms
- udp cdn.playwright.dev type=1 edns=0: 141 bytes, rcode=0, tc=0, answers=3, 35 ms
- udp cdn.playwright.dev type=1 edns=1232: 152 bytes, rcode=0, tc=0, answers=3, 2 ms
- udp cdn.playwright.dev type=28 edns=0: 153 bytes, rcode=0, tc=0, answers=3, 13 ms
- udp cdn.playwright.dev type=28 edns=1232: 164 bytes, rcode=0, tc=0, answers=3, 2 ms
- tcp cdn.playwright.dev type=1: 141 bytes, rcode=0, tc=0, answers=3, 4 ms
- udp github.com type=1 edns=0: 44 bytes, rcode=0, tc=0, answers=1, 13 ms
- udp github.com type=1 edns=1232: 55 bytes, rcode=0, tc=0, answers=1, 2 ms
- udp github.com type=28 edns=0: 93 bytes, rcode=0, tc=0, answers=0, 15 ms
- udp github.com type=28 edns=1232: 104 bytes, rcode=0, tc=0, answers=0, 13 ms
- tcp github.com type=1: 44 bytes, rcode=0, tc=0, answers=1, 4 ms
- options edns0
- 172.217.22.91 STREAM storage.googleapis.com
- 172.217.20.59 STREAM storage.googleapis.com
- Cleaning up orphan processes