All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.16.0 - 2024-11-01
- replace
structopt
with latestclap
.structopt
is unmaintained and contains dependencies with security alerts - upgrade to
sysinfo v0.32.0
- auto-upgrade all other dependencies
0.15.0 - 2024-08-30
- bump the MSRV to
1.74.0
- upgrade to
rsdns v0.19.0
- upgrade to
sysinfo v0.31.4
- auto-upgrade all other dependencies
0.14.0 - 2024-07-12
- do not required
rustfmt
in the build script. This makes the code formatting a best-effort. And allows buildingch4
on toolchains whererustfmt
isn't installed. - upgrade to
rsdns v0.18.0
- auto-upgrade dependencies
0.13.0 - 2024-01-19
This is a small, but breaking, release that mainly refreshes dependencies and updates the MSRV.
- bump the MSRV to
1.70.0
- upgrade to
rsdns v0.17.0
andsmol v2
- upgrade to
windows v0.52.0
- upgrade to
sysinfo v0.30.5
- auto-upgrade all other dependencies
0.12.0 - 2023-10-21
ch4
now supports unknown record types, i.e. record types which are still not officially supported inrsdns
. Such record types can be specified following rules of RFC 3597 section 5 for unknown types and classes. Note thatdig
also supports types specified in this format. The following snippet shows a query forCAA
records onbbc.com
.
$> ch4 TYPE257 bbc.com
; <<>> ch4 0.12.0 <<>> TYPE257 bbc.com
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50331
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;bbc.com. IN TYPE257
;; ANSWER SECTION:
bbc.com. 300 IN TYPE257 \# 32 0005696f 6465666d 61696c74 6f3a7365 63757269 74794062 62632e63 6f2e756b
bbc.com. 300 IN TYPE257 \# 25 00096973 73756577 696c6467 6c6f6261 6c736967 6e2e636f 6d
bbc.com. 300 IN TYPE257 \# 21 00056973 73756567 6c6f6261 6c736967 6e2e636f 6d
bbc.com. 300 IN TYPE257 \# 19 00056973 73756564 69676963 6572742e 636f6d
$> dig TYPE257 bbc.com
; <<>> DiG 9.18.18-0ubuntu2-Ubuntu <<>> TYPE257 bbc.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25011
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;bbc.com. IN CAA
;; ANSWER SECTION:
bbc.com. 116 IN CAA 0 issue "globalsign.com"
bbc.com. 116 IN CAA 0 issuewild "globalsign.com"
bbc.com. 116 IN CAA 0 iodef "mailto:[email protected]"
bbc.com. 116 IN CAA 0 issue "digicert.com"
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Oct 21 22:22:10 IDT 2023
;; MSG SIZE rcvd: 181
- the MSRV is
1.66
now due to various dependencies - upgrade to
rsdns v0.16.0
- upgrade to
built v0.7.1
- upgrade to
windows v0.51.0
- upgrade to
tera v0.19.0
- upgrade to
sysinfo v0.29.9
0.11.2 - 2023-04-08
- upgrade to
tera v1.18.1
- upgrade to
base64 v0.21.0
- upgrade to
built v0.6.0
- upgrade to
sysinfo v0.28.4
- upgrade to
windows v0.48.0
- upgrade to
rsdns v0.15.0
- fix
clippy::derivable_impls
warning - fix
clippy::needless-borrow
warning
0.11.1 - 2022-12-23
- show
rsdns
version inch4 --info
0.11.0 - 2022-12-23
- the MSRV is
1.64.0
now (was1.60.0
before) - upgrade to
windows v0.43.0
- upgrade to
rsdns v0.14.0
- upgrade to
sysinfo v0.27.1
- upgrade to
base64 v0.20.0
- auto-update other dependencies
- fix
clippy::uninlined_format_args
warning
0.10.3 - 2022-10-04
- refresh dependencies
- upgrade to
windows v0.42.0
- upgrade to
tera v0.17.1
- fix
clippy
warnings detected with the latest beta releases
0.10.2 - 2022-07-30
- refresh dependencies
- upgrade to
windows v0.39.0
- raise MSRV to
v1.60.0
0.10.1 - 2022-05-27
- refresh dependencies
- upgrade to
windows v0.37.0
- fix formatting of TTL in zone file format (must be explicitly left aligned)
- fix calculation of column sizes in zone file format (skip
OPT
records in sizes calculation)
0.10.0 - 2022-04-29
- upgrade to
windows v0.36.1
. - The MSRV is
v1.59.0
now, due to upgrade to the latest windows crate version. - upgrade to
rsdns v0.13.0
. This adds support for the underscore character_
in domain names.
0.9.1 - 2022-01-21
This release only refreshes the dependencies, without changing anything in ch4 logic itself.
- upgrade to
windows v0.30.0
- upgrade to
sysinfo v0.23.0
- upgrade to
rsdns v0.12.0
0.9.0 - 2021-11-20
-
add support for EDNS0. EDNS is enabled by default with
version: 0
andbufsize: 4096
The following options allow EDNS customization:
+bufsize=<n_bytes>
- set the UDP payload size advertised in theOPT
pseudo-record+noedns
- disable EDNS+edns[=<ver>]
- enable EDNS and optionally set a custom version
- upgrade to
windows v0.28.0
- upgrade to
tera v1.15.0
0.8.0 - 2021-10-30
- move to
Rust 2021
. The minimum supported rust version was raised to1.56
(MSRV 1.56
) - move to
rsdns 0.8.0
0.7.0 - 2021-10-01
-
add
+gen
output format. The flag forcesRFC 3597
generic output on all record types, known and unknown alike.; <<>> ch4 0.6.0 git:096f3be <<>> crates.io +gen ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9844 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;crates.io. IN A ;; ANSWER SECTION: crates.io. 60 IN A \# 4 0de2003d crates.io. 60 IN A \# 4 0de20017 crates.io. 60 IN A \# 4 0de2006c crates.io. 60 IN A \# 4 0de20021 ;; Query time: 64.822579ms ;; SERVER: 127.0.0.53:53 ;; WHEN: Fri, 01 Oct 2021 00:03:10 +0300 ;; MSG SIZE rcvd: 91
-
upgrade to
rsdns v0.6.0
-
improve
+rust
formatting option:- Properly align the last, possibly shorter, line of the array.
- Include the line offset (in bytes) in the visual comment.
- Add
#[rustfmt::skip]
to the generated array.
The output of
+rust
looks like this now.// A bbc.com #[rustfmt::skip] const M0: [u8; 89] = [ 0xbf, 0xe2, 0x81, 0x80, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // |............| 0 0x03, 0x62, 0x62, 0x63, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, 0x00, // |.bbc.com....| 12 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, // |..........U.| 24 0x04, 0x97, 0x65, 0xc0, 0x51, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, // |..e.Q.......| 36 0x00, 0x00, 0x55, 0x00, 0x04, 0x97, 0x65, 0x40, 0x51, 0xc0, 0x0c, 0x00, // |..U...e@Q...| 48 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x04, 0x97, 0x65, 0x00, // |......U...e.| 60 0x51, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, // |Q.........U.| 72 0x04, 0x97, 0x65, 0x80, 0x51, /* */ // |..e.Q| 84 ];
-
support RFC 3597 section 5 for unknown record types. Unknown record data is formatted now as an array of bytes. Moreover, all obsolete record types are formatted this way as well. Previously, unknown record types were silently ignored. See
+gen
formatting option above for an output example.
0.6.0 - 2021-09-14
-
add
-s/--save
option to save the received messages to a file, in addition to formatting them.The following command saves the received response to file
crates.io.ch4
:$> ch4 crates.io --save crates.io.ch4
; <<>> ch4 0.5.0 git:3b1ecc4 <<>> --save crates.io.ch4 crates.io ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2825 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;crates.io. IN A ;; ANSWER SECTION: crates.io. 60 IN A 13.225.255.29 crates.io. 60 IN A 13.225.255.26 crates.io. 60 IN A 13.225.255.54 crates.io. 60 IN A 13.225.255.16 ;; Query time: 67.559554ms ;; SERVER: 127.0.0.53:53 ;; WHEN: Sat, 11 Sep 2021 10:07:19 +0300 ;; MSG SIZE rcvd: 91
the saved file has the following format:
[ { "data": "CwmBgAABAAQAAAAABmNyYXRlcwJpbwAAAQABwAwAAQABAAAAPAAEDeH/HcAMAAEAAQAAADwABA3h/xrADAABAAEAAAA8AAQN4f82wAwAAQABAAAAPAAEDeH/EA==", "duration": { "nanos": 67559554, "secs": 0 }, "nameserver": "127.0.0.53:53", "qname": "crates.io", "qtype": "A", "timestamp": { "nanos": 347228847, "secs": 1631344039 } } ]
-
add
-r/--read
option to read messages written by-s/--save
, instead of querying a nameserver.Now a message can be saved, and later read several times, possibly with different output formatting.
$> ch4 --read crates.io.ch4 +rust
// A crates.io const M0: [u8; 91] = [ 0x0b, 0x09, 0x81, 0x80, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // |............| 0x06, 0x63, 0x72, 0x61, 0x74, 0x65, 0x73, 0x02, 0x69, 0x6f, 0x00, 0x00, // |.crates.io..| 0x01, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, // |............| 0x3c, 0x00, 0x04, 0x0d, 0xe1, 0xff, 0x1d, 0xc0, 0x0c, 0x00, 0x01, 0x00, // |<...........| 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x04, 0x0d, 0xe1, 0xff, 0x1a, 0xc0, // |....<.......| 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x04, 0x0d, // |........<...| 0xe1, 0xff, 0x36, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, // |..6.........| 0x3c, 0x00, 0x04, 0x0d, 0xe1, 0xff, 0x10, // |<......| ];
0.5.0 - 2021-09-10
-
add
+rust
option to print DNS responses as Rust arrays.So, the following message:
$> ch4 A docs.rs ; <<>> ch4 0.5.0 git:45400fd <<>> A docs.rs ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31431 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;docs.rs. IN A ;; ANSWER SECTION: docs.rs. 15 IN A 13.225.255.26 docs.rs. 15 IN A 13.225.255.46 docs.rs. 15 IN A 13.225.255.38 docs.rs. 15 IN A 13.225.255.105 ;; Query time: 988.261µs ;; SERVER: 127.0.0.53:53 ;; WHEN: Fri, 10 Sep 2021 07:41:11 +0300 ;; MSG SIZE rcvd: 89
can be printed as a Rust array the following way
$> ch4 A docs.rs +rust // A docs.rs const M0: [u8; 89] = [ 0xa1, 0xa7, 0x81, 0x80, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // |............| 0x04, 0x64, 0x6f, 0x63, 0x73, 0x02, 0x72, 0x73, 0x00, 0x00, 0x01, 0x00, // |.docs.rs....| 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, // |............| 0x04, 0x0d, 0xe1, 0xff, 0x1a, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, // |............| 0x00, 0x00, 0x0d, 0x00, 0x04, 0x0d, 0xe1, 0xff, 0x2e, 0xc0, 0x0c, 0x00, // |............| 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x04, 0x0d, 0xe1, 0xff, // |............| 0x26, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, // |&...........| 0x04, 0x0d, 0xe1, 0xff, 0x69, // |....i| ];
- upgrade to
rsdns v0.5.0
- update ch4 documentation to be aligned with DNS Client definition of rsdns
0.4.0 - 2021-09-04
- support
RFC 8482
for syntheticHINFO
response onANY
query. Till nowHINFO
record type was treated as obsolete, and its data wasn't formatted in zone output.
- starting from this release tag names are prefixed with
v
. Old tags were adjusted accordingly. UDP
is used by default for all queries, includingANY
- upgrade to
rsdns v0.4.0
0.3.1 - 2021-08-27
- fix
@
nameserver prefix example in the README file - add a link to the CHANGELOG in the README file
0.3.0 - 2021-08-27
- add
+[no]short
flag, for compatibility withdig
. When enabled,ch4
performs CNAME flattening to find the requested record type. Only record data is printed, one record on a line.
-p, --port
option was fixed on Windows. Was ignored in favor of OS configured port.
- update Cargo dependencies
- remove
--rrset
in favor of the+short
flag
0.2.0 - 2021-08-13
- update to
rsdns 0.3.0
- support leading digits in domain names
RFC 1101
- add installation instructions in README
0.1.0 - 2021-08-13
- First release