main ab6686c

dns success 11s

  1. Current runner version: 'v0.5.0'
  2. GITHUB_TOKEN Permissions
  3. Contents: read
  4. Metadata: read
  5. Packages: read
  6. Secret source: Actions
  7. Cache mode: write
  8. Prepare workflow directory
  9. Prepare all required actions
  10. Complete job name: dns
  11. Run cat > /tmp/probe.py <<'EOF'
  12. <U+001B>[36;1mcat > /tmp/probe.py <<'EOF'<U+001B>[0m
  13. <U+001B>[36;1mimport random, socket, struct, time<U+001B>[0m
  14. <U+001B>[36;1m<U+001B>[0m
  15. <U+001B>[36;1mNS = ("10.200.0.1", 53)<U+001B>[0m
  16. <U+001B>[36;1m<U+001B>[0m
  17. <U+001B>[36;1mdef query(name, qtype, edns):<U+001B>[0m
  18. <U+001B>[36;1m qid = random.randint(0, 65535)<U+001B>[0m
  19. <U+001B>[36;1m q = struct.pack(">HHHHHH", qid, 0x0100, 1, 0, 0, 1 if edns else 0)<U+001B>[0m
  20. <U+001B>[36;1m for label in name.split("."):<U+001B>[0m
  21. <U+001B>[36;1m q += bytes([len(label)]) + label.encode()<U+001B>[0m
  22. <U+001B>[36;1m q += b"\x00" + struct.pack(">HH", qtype, 1)<U+001B>[0m
  23. <U+001B>[36;1m if edns:<U+001B>[0m
  24. <U+001B>[36;1m q += b"\x00" + struct.pack(">HHIH", 41, edns, 0, 0)<U+001B>[0m
  25. <U+001B>[36;1m return q<U+001B>[0m
  26. <U+001B>[36;1m<U+001B>[0m
  27. <U+001B>[36;1mdef show(tag, r, t):<U+001B>[0m
  28. <U+001B>[36;1m flags, an = struct.unpack(">H", r[2:4])[0], struct.unpack(">H", r[6:8])[0]<U+001B>[0m
  29. <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
  30. <U+001B>[36;1m<U+001B>[0m
  31. <U+001B>[36;1mdef udp(name, qtype, edns):<U+001B>[0m
  32. <U+001B>[36;1m s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)<U+001B>[0m
  33. <U+001B>[36;1m s.settimeout(4)<U+001B>[0m
  34. <U+001B>[36;1m t = time.time()<U+001B>[0m
  35. <U+001B>[36;1m s.sendto(query(name, qtype, edns), NS)<U+001B>[0m
  36. <U+001B>[36;1m try:<U+001B>[0m
  37. <U+001B>[36;1m show(f"udp {name} type={qtype} edns={edns}", s.recv(65535), (time.time() - t) * 1000)<U+001B>[0m
  38. <U+001B>[36;1m except Exception as e:<U+001B>[0m
  39. <U+001B>[36;1m print(f"udp {name} type={qtype} edns={edns}: {e!r}")<U+001B>[0m
  40. <U+001B>[36;1m<U+001B>[0m
  41. <U+001B>[36;1mdef tcp(name, qtype):<U+001B>[0m
  42. <U+001B>[36;1m q = query(name, qtype, 0)<U+001B>[0m
  43. <U+001B>[36;1m s = socket.create_connection(NS, timeout=4)<U+001B>[0m
  44. <U+001B>[36;1m t = time.time()<U+001B>[0m
  45. <U+001B>[36;1m s.sendall(struct.pack(">H", len(q)) + q)<U+001B>[0m
  46. <U+001B>[36;1m try:<U+001B>[0m
  47. <U+001B>[36;1m n = struct.unpack(">H", s.recv(2))[0]<U+001B>[0m
  48. <U+001B>[36;1m r = b""<U+001B>[0m
  49. <U+001B>[36;1m while len(r) < n:<U+001B>[0m
  50. <U+001B>[36;1m r += s.recv(n - len(r))<U+001B>[0m
  51. <U+001B>[36;1m show(f"tcp {name} type={qtype}", r, (time.time() - t) * 1000)<U+001B>[0m
  52. <U+001B>[36;1m except Exception as e:<U+001B>[0m
  53. <U+001B>[36;1m print(f"tcp {name} type={qtype}: {e!r}")<U+001B>[0m
  54. <U+001B>[36;1m<U+001B>[0m
  55. <U+001B>[36;1mfor name in ["storage.googleapis.com", "cdn.playwright.dev", "github.com"]:<U+001B>[0m
  56. <U+001B>[36;1m for qtype in (1, 28):<U+001B>[0m
  57. <U+001B>[36;1m for edns in (0, 1232):<U+001B>[0m
  58. <U+001B>[36;1m udp(name, qtype, edns)<U+001B>[0m
  59. <U+001B>[36;1m tcp(name, 1)<U+001B>[0m
  60. <U+001B>[36;1mEOF<U+001B>[0m
  61. <U+001B>[36;1mpython3 /tmp/probe.py<U+001B>[0m
  62. <U+001B>[36;1mfor i in 1 2; do getent ahostsv4 storage.googleapis.com | head -1 || echo "getent failed"; done<U+001B>[0m
  63. <U+001B>[36;1mecho "options edns0" | sudo tee -a /etc/resolv.conf<U+001B>[0m
  64. <U+001B>[36;1mfor i in 1 2; do getent ahostsv4 storage.googleapis.com | head -1 || echo "getent failed"; done<U+001B>[0m
  65. shell: /usr/bin/bash -e {0}
  66. udp storage.googleapis.com type=1 edns=0: 12 bytes, rcode=2, tc=0, answers=0, 3001 ms
  67. udp storage.googleapis.com type=1 edns=1232: 291 bytes, rcode=0, tc=0, answers=15, 2 ms
  68. udp storage.googleapis.com type=28 edns=0: 152 bytes, rcode=0, tc=0, answers=4, 1 ms
  69. udp storage.googleapis.com type=28 edns=1232: 163 bytes, rcode=0, tc=0, answers=4, 1 ms
  70. tcp storage.googleapis.com type=1: 280 bytes, rcode=0, tc=0, answers=15, 4 ms
  71. udp cdn.playwright.dev type=1 edns=0: 141 bytes, rcode=0, tc=0, answers=3, 35 ms
  72. udp cdn.playwright.dev type=1 edns=1232: 152 bytes, rcode=0, tc=0, answers=3, 2 ms
  73. udp cdn.playwright.dev type=28 edns=0: 153 bytes, rcode=0, tc=0, answers=3, 13 ms
  74. udp cdn.playwright.dev type=28 edns=1232: 164 bytes, rcode=0, tc=0, answers=3, 2 ms
  75. tcp cdn.playwright.dev type=1: 141 bytes, rcode=0, tc=0, answers=3, 4 ms
  76. udp github.com type=1 edns=0: 44 bytes, rcode=0, tc=0, answers=1, 13 ms
  77. udp github.com type=1 edns=1232: 55 bytes, rcode=0, tc=0, answers=1, 2 ms
  78. udp github.com type=28 edns=0: 93 bytes, rcode=0, tc=0, answers=0, 15 ms
  79. udp github.com type=28 edns=1232: 104 bytes, rcode=0, tc=0, answers=0, 13 ms
  80. tcp github.com type=1: 44 bytes, rcode=0, tc=0, answers=1, 4 ms
  81. options edns0
  82. 172.217.22.91 STREAM storage.googleapis.com
  83. 172.217.20.59 STREAM storage.googleapis.com
  84. Cleaning up orphan processes

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 13

↑↓ moveenter openesc close