Git Product home page Git Product logo

zdns's Introduction

ZMap: The Internet Scanner

Build Status

ZMap is a fast single packet network scanner designed for Internet-wide network surveys. On a typical desktop computer with a gigabit Ethernet connection, ZMap is capable scanning the entire public IPv4 address space on a single port in under 45 minutes. With a 10gigE connection and netmap or PF_RING, ZMap can scan the IPv4 address space in under 5 minutes.

ZMap operates on GNU/Linux, Mac OS, and BSD. ZMap currently has fully implemented probe modules for TCP SYN scans, ICMP, DNS queries, UPnP, BACNET, and can send a large number of UDP probes. If you are looking to do more involved scans (e.g., banner grab or TLS handshake), take a look at ZGrab 2, ZMap's sister project that performs stateful application-layer handshakes.

Using ZMap

If you haven't used ZMap before, we have a step-by-step Getting Started Guide that details how to perform basic scans. Documentation about all of ZMap's options and more advanced functionality can be found in our Wiki.

If you have questions, please first check our FAQ. Still have questions? Ask the community in Github Discussions. Please do not create an Issue for usage or support questions.

Installation

The latest stable release of ZMap is 4.2.0 and supports Linux, macOS, and BSD.

Instructions on building ZMap from source can be found in INSTALL.

Architecture

More information about ZMap's architecture and a comparison with other tools can be found in these two research papers:

If you use ZMap for published research, please cite the original research paper:

@inproceedings{durumeric2013zmap,
  title={{ZMap}: Fast Internet-wide scanning and its security applications},
  author={Durumeric, Zakir and Wustrow, Eric and Halderman, J Alex},
  booktitle={22nd USENIX Security Symposium},
  year={2013}
}

Citing the ZMap paper helps us to track ZMap usage within the research community and to pursue funding for continued development.

License and Copyright

ZMap Copyright 2023 Regents of the University of Michigan

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See LICENSE for the specific language governing permissions and limitations under the License.

zdns's People

Contributors

adhirramjiawan avatar anoop-b avatar asafhad avatar bayerhonza avatar catherinehan avatar cj-filip-savin avatar clayzim avatar constantinsander avatar dadrian avatar dependabot[bot] avatar dharnitski avatar domderen avatar epicfaace avatar fbexiga avatar hdm avatar janrueth avatar jauderho avatar jcrowgey avatar kesara avatar laixintao avatar lizizhikevich avatar paul-pearce avatar phillip-stephens avatar smeinecke avatar stirnim avatar stklcode avatar thereallogani avatar vishalmohanty avatar wavvs avatar zakird avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zdns's Issues

PTR module causes zDNS to exit if given bad IP address

This logic, shown below, in the PTR module (modules/ptr/ptr.go) causes zdns to actually exit. I have zdns operating as part of an automated daily run that looks up millions of domains A records, and the PTR of those results, and I found that this was quite literally killing my processing efforts. I'd imagine most other users don't want this to exit if given a bad IP either. Wouldn't the proper, expected result be an error message such as {name: "bad IP address", status: "invalid ip error"} or something in JSON instead of it exiting? Considering that zdns can process gigantic files with great speed, having the program exit entirely because of a bad IP address is unwarranted.

Code is below:

    nameServer := s.Factory.Factory.RandomNameServer()
    name, err := dns.ReverseAddr(name)
    if err != nil {
            log.Fatal("Invalid IP address received:", name)
    }

Top level nameserver failures should result in retries in --iterative or --retries

Right now if a root server times out in --iterative mode the query fails without trying other roots. This is because the root servers were bolted onto factory.RandomNameServer. This behavior should change, but will require a fairly large restructuring of how we handle name servers. However we fix it, we should also have --retries > 1 try other nameservers (if they exist).

DMARC Scan module should include a query against _dmarc.$DOMAIN.$TLD

For ease of use by an end user using the DMARC Module should produce queries against TXT records for _dmarc.$DOMAIN.$TLD, as well as against the $DOMAIN.$TLD as it currently does. This is due to the fact that many DMARC service providers and documentation state to put all dmarc records under a subdomain of _dmarc, while other domains will put those TXT records at root. If the goal is to provide as wide of coverage as possible for scanning domains for DMARC records a simple prepending of _dmarc. to any domain to be scanned would produce more results.

Ideal logic may be to query against _dmarc. and if nothing is found try against the domain.tld. (there should be a higher incidence of results under _dmarc domains)

By adding this change, users of the DMARC module would get more accurate scan results and would be saved the time of having to produce two lists of domains to run two scans against (one with prepend _dmarc. and the other with just the domain).

Results of scanning against _dmarc.$DOMAIN:

{"name":"_dmarc.360.cn","alexa_rank":20,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.twitter.com","alexa_rank":10,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1"}}
{"name":"_dmarc.pinterest.com","alexa_rank":44,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; fo=1; pct=100; rua=mailto:[email protected],mailto:[email protected]; ruf=mailto:[email protected],mailto:[email protected]"}}
{"name":"_dmarc.google.co.jp","alexa_rank":14,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]"}}
{"name":"_dmarc.twitch.tv","alexa_rank":92,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=none; fo=1; ri=3600; rua=mailto:[email protected]; ruf=mailto:[email protected]"}}
{"name":"_dmarc.netflix.com","alexa_rank":43,"status":"NOERROR","data":{"dmarc":"v=DMARC1;p=reject;pct=100;ruf=mailto:[email protected],mailto:[email protected];rua=mailto:[email protected],mailto:[email protected]"}}
{"name":"_dmarc.google.com","alexa_rank":1,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]"}}
{"name":"_dmarc.apple.com","alexa_rank":36,"status":"NOERROR","data":{"dmarc":"v=DMARC1;p=none;ruf=mailto:[email protected];rua=mailto:[email protected];fo=1"}}
{"name":"_dmarc.himado.in","alexa_rank":818,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.google.co.kr","alexa_rank":61,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]"}}
{"name":"_dmarc.instagram.com","alexa_rank":15,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected];"}}
{"name":"_dmarc.thewhizmarketing.com","alexa_rank":261,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.hao123.com","alexa_rank":19,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.weibo.com","alexa_rank":17,"status":"SERVFAIL","data":{}}
{"name":"_dmarc.google.com.vn","alexa_rank":183,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]"}}
{"name":"_dmarc.bhphotovideo.com","alexa_rank":817,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.wikipedia.org","alexa_rank":6,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=none; sp=none; rua=mailto:[email protected]; ruf=mailto:[email protected];"}}
{"name":"_dmarc.amazon.com","alexa_rank":8,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=quarantine; pct=100; rua=mailto:[email protected]; ruf=mailto:[email protected]"}}
{"name":"_dmarc.outbrain.com","alexa_rank":94,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.wordpress.com","alexa_rank":35,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=quarantine; pct=50; rua=mailto:[email protected]; ruf=mailto:[email protected];"}}
{"name":"_dmarc.fc2.com","alexa_rank":66,"status":"NXDOMAIN","data":{}}
{"name":"_dmarc.linkedin.com","alexa_rank":16,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected],mailto:[email protected]; ruf=mailto:[email protected],mailto:[email protected]; pct=100"}}
{"name":"_dmarc.yahoo.com","alexa_rank":5,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; pct=100; rua=mailto:[email protected];"}}
{"name":"_dmarc.google.com.mx","alexa_rank":51,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=reject; rua=mailto:[email protected]"}}
{"name":"_dmarc.ebay.com","alexa_rank":33,"status":"NOERROR","data":{"dmarc":"v=DMARC1; p=none; rua=mailto:[email protected],mailto:[email protected]; ruf=mailto:[email protected],mailto:[email protected]; fo=1; rf=afrf; pct=100"}}

Results of "default scan behavior" of DMARC module:
{"name":"fbcdn.net","alexa_rank":210,"status":"NORECORD","data":{}}
{"name":"google.com","alexa_rank":1,"status":"NORECORD","data":{}}
{"name":"instagram.com","alexa_rank":15,"status":"NORECORD","data":{}}
{"name":"mercadolibre.com.ar","alexa_rank":496,"status":"NORECORD","data":{}}
{"name":"doubleclick.net","alexa_rank":140,"status":"NORECORD","data":{}}
{"name":"openload.co","alexa_rank":219,"status":"NORECORD","data":{}}
{"name":"amazon.com","alexa_rank":8,"status":"NORECORD","data":{}}
{"name":"abs-cbn.com","alexa_rank":463,"status":"NORECORD","data":{}}
{"name":"wittyfeed.com","alexa_rank":286,"status":"NORECORD","data":{}}
{"name":"google.hu","alexa_rank":377,"status":"NORECORD","data":{}}
{"name":"leagueoflegends.com","alexa_rank":542,"status":"NORECORD","data":{}}
{"name":"googleapis.com","alexa_rank":406,"status":"NORECORD","data":{}}
{"name":"yahoo.com","alexa_rank":5,"status":"NORECORD","data":{}}
{"name":"nametests.com","alexa_rank":295,"status":"NORECORD","data":{}}
{"name":"sabah.com.tr","alexa_rank":394,"status":"NORECORD","data":{}}
{"name":"extratorrent.cc","alexa_rank":185,"status":"NORECORD","data":{}}
{"name":"linkshrink.net","alexa_rank":809,"status":"NORECORD","data":{}}
{"name":"behance.net","alexa_rank":411,"status":"NORECORD","data":{}}
{"name":"google.ca","alexa_rank":62,"status":"NORECORD","data":{}}
{"name":"blogspot.com","alexa_rank":42,"status":"NORECORD","data":{}}
{"name":"ask.fm","alexa_rank":499,"status":"NORECORD","data":{}}
{"name":"bloomberg.com","alexa_rank":414,"status":"NORECORD","data":{}}
{"name":"blogspot.com.eg","alexa_rank":853,"status":"NORECORD","data":{}}
{"name":"youtube.com","alexa_rank":2,"status":"NORECORD","data":{}}
{"name":"spankbang.com","alexa_rank":474,"status":"NORECORD","data":{}}

Change default timeout value

Currently the default zdns timeout value is 10 seconds. The default BIND timeout value is also 10 seconds. This creates a situation where zdns frequently returns TIMEOUT a few milliseconds before BIND returns SERVFAIL (assuming default invocations of both).

Bumping this to 15 seconds seems reasonable.

CLI option to silence the listing of nameservers

Can we get an option to silence the output of the nameservers list when no nameservers are specified on the command line? I have a list of about 500 and it fills up the screen, obscuring whatever else I was doing.

Support CAA Records

We're probably going to have to PR to miekg, but this would be very useful to have.

We should follow CNAMEs

Right now, our A and CNAME modules will hand you make the exact response of what's received from the server. So, in the case of looking up A for www.censys.io, you'll get back

CNAME www.censys.io -> censys.io
A censys.io IP

While this is technically correct, we should have a module that just provides the IP address for www.censys.io, similar to how nslookup would function.

DNS lookup

I download some datasets from "https://www.censys.io/data", such as "80-http-get-alexa_top1mil".I find that the dataset includes "alexa-results.csv.lz4" and the website introduces "this dataset is composed of the DNS lookups for each domain on the Alexa Top Million".How can I get the data in "alexa-results.csv.lz4" with DNS lookups ? What is the command? thank you.

ALOOKUP Module does not follow CNAMEs consistently

It appears that the ALOOKUP module doesn't always provide back any data if there's a cname present. For example, www.censys.io:

echo "www.censys.io" | ./zdns alookup
INFO[0000] no name servers specified. will use: 172.19.134.2:53
{"name":"www.censys.io","status":"success","data":{}}

Add unit tests for all supported protocols (6 missing)

The following protocols are advertised as supported, but have no unit tests:

  • AXFR
  • CNAME
  • DMARC
  • TXT
  • SOA
  • SPF

We should also probably build out the framework so it tests iterative and non iterative queries without having to define the functions twice, once with --iterative

Option to specify IP(s) from which we send queries

I have three local cacheing-only resolvers running 'unbound' and each resolver has 16 IPs attached to it (as well as ~1024 IPv6 IPs), through which unbound rotates round-robin when sending outbound requests on behalf of lookups made from local clients.

It would be nice if zdns had an option to specify from which IP(s) it sends its requests from (that is, which IP it would bind() to). In a case where I have multiple IPs on a machine, this would allow me to kind of spread the load around when doing heavy NS lookups on public servers. It could be presented with a CLI option like -source-ips IP1,IP2,IP3 etc like you may specify name servers. The purpose of this is to help avoid banning on public DNS servers during heavy query sessions. And, considering zdns was built for this kind of thing (heavy queries!), I'd imagine an option like this is a natural progression and should not be too difficult implement (in C I just set the bind() for the socket; with Go, I have no idea).

Thanks

flag provided but not defined

I performed this command: cat ./top-1m.csv | ./zdns MX --lookup-ipv4 --alexa , and the answer was ”flag provided but not defined: -lookup-ipv4”.Does it need other module?

Timeout error message includes unicode

Timeouts currently look like the following
{"name":"bbva.es","alexa_rank":2954,"status":"ERROR","error":"read udp 172.30.1.44:58741-\u003e172.30.0.2:53: i/o timeout"} {"name":"google.com.qa","alexa_rank":2691,"status":"ERROR","error":"read udp 172.30.1.44:46879-\u003e172.30.0.2:53: i/o timeout"} {"name":"sme.sk","alexa_rank":3106,"status":"ERROR","error":"read udp 172.30.1.44:43827-\u003e172.30.0.2:53: i/o timeout"} {"name":"smallpdf.com","alexa_rank":1849,"status":"ERROR","error":"read udp 172.30.1.44:56883-\u003e172.30.0.2:53: i/o timeout"}

Which is fairly unfortunate. These should probably look like: {"name":"smallpdf.com","alexa_rank":1849,"status":"TIMEOUT"}

README has broken syntax

cat top-1m.csv | zdns MX --lookup-ipv4 --alexa all of the lookup-ipv4 commands are wrong. I believe they should be ipv4-lookup. But an overall check of the correctness of the readme should be performed.

MX records w/ preferences (and "exchanges" JSON label) disappeared?

Output for the MX module used to include an "exchanges" category in JSON that contained the MX record with its MX priority and also an option "-ipv[4/6]-lookup" that would lookup the MX records A/AAAA records. Now, however, "zdns MX" does not provide any of this - instead it provides the MXes in the "answers" JSON field, with no MX priority/preference, and the "-ipv[4/6]-lookup" options are gone as well.

What happened here? It was working fine just a few compiles / pulls ago.

Logic in ALOOKUP is invalid

The module currently returns any A records for which there is also a CNAME record in the Answers or Additionals section instead of actually tracing a name through. This will miss multiple layers of CNAMEs depending on order.

[Bug] a-module sometimes outputs empty answer

From the eakir744mcoetme2-alexa-top1m-www-alookups.20160907.json run. Note that object["answers"][0] is an empty object.

{
"data": {
"protocol": "udp",
"authorities": [
{
"answer": "ns1.pr.gov.",
"name": "pr.gov",
"type": "NS",
"ttl": 11711
},
{
"answer": "ns2.pr.gov.",
"name": "pr.gov",
"type": "NS",
"ttl": 11711
}
],
"additionals": [
{
"answer": "64.185.221.2",
"name": "ns1.pr.gov",
"type": "A",
"ttl": 11711
},
{
"answer": "64.185.205.211",
"name": "ns2.pr.gov",
"type": "A",
"ttl": 11711
}
],
"answers": [
{},
{
"answer": "www.pr.gov.",
"name": "www.gobierno.pr",
"type": "CNAME",
"ttl": 55033
},
{
"answer": "pr.gov.",
"name": "www.pr.gov",
"type": "CNAME",
"ttl": 120
},
{
"answer": "64.185.222.145",
"name": "pr.gov",
"type": "A",
"ttl": 180
}
]
},
"status": "NOERROR",
"alexa_rank": 44972,
"name": "gobierno.pr",
"altered_name": "www.gobierno.pr"
}

Remove dependency on local recursive resolver

ZDNS currently depends on a local DNS server to complete recursive lookups. However, the DNS infrastructure at many institutions cannot handle this load. We should have the functionality where ZDNS does iterative lookups based on a pre-configured list of root servers.

We'll need to handle both the iterative resolution and caching. Caching can likely be simply implemented on top of cachehash.

ALOOKUP returns success when reord does not exist

Currently the ALOOKUP for a domain that doesn't have an A record looks like:

{"name":"7112196.com","alexa_rank":5199,"status":"SUCCESS","data":{}}

This should be:

{"name":"7112196.com","alexa_rank":5199,"status":"NO_ANSWER"}

PTR lookups appear broken

zakir:zdns (caa-tests)$ echo "141.212.121.10" | ./zdns ptr | jq 
{
  "name": "141.212.121.10",
  "status": "NXDOMAIN",
  "timestamp": "2017-05-02T18:18:18-04:00",
  "data": {
    "answers": [],
    "additionals": [],
    "authorities": [],
    "protocol": "udp",
    "flags": {
      "response": false,
      "opcode": 0,
      "authoritative": false,
      "truncated": false,
      "recursion_desired": false,
      "recursion_available": false,
      "authenticated": false,
      "checking_disabled": false,
      "error_code": 0
    }
  }
}

MX Scan Segfaults

root@search-worker-9:/home/zakir# /var/search/tmp/gopath_1drdrp8u.tmp/bin/zdns MX --alexa --input-file=/var/search/tmp/alexa-ex_s17hbgp9.tmp/top-1m.csv --output-file=/var/search/tmp/alexa-mx-lookups_s77hjzrv.tmp
INFO[0000] no name servers specified. will use: 141.213.15.4:53, 141.213.4.4:53, 141.212.113.4:53 
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x18 pc=0x47a923]

goroutine 405 [running]:
github.com/zmap/zdns/modules/mx.(*Lookup).DoLookup(0xc820160280, 0xc820179284, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /var/search/tmp/gopath_1drdrp8u.tmp/src/github.com/zmap/zdns/modules/mx/mx.go:112 +0x2e3
github.com/zmap/zdns.doLookup(0xc82000ebb0, 0xc820096b40, 0xc820016660, 0xc8200166c0, 0xc820016720, 0xc82000ed30, 0x0, 0x0)
    /var/search/tmp/gopath_1drdrp8u.tmp/src/github.com/zmap/zdns/lookup.go:91 +0x5bc
created by github.com/zmap/zdns.DoLookups
    /var/search/tmp/gopath_1drdrp8u.tmp/src/github.com/zmap/zdns/lookup.go:188 +0x2ad

GOMAXPROCS flag unncessary

GOMAXPROCS now defaults to the number of processor cores on the system. This is the default we would want anyway, and it can still be overrided using the $GOMAXPROCS environment variable.

Request for (and failure to implement!) "PTR" lookup module

I was surprised to see there is no "PTR" module for doing quick PTR lookups on IPs. There's DMARC lookups(!) but no PTR. Would anyone implement this? I ask because I failed implementing it - read below...

I know absolutely nothing about the "Go" language, but being a C programmer I thought I'd take a stab at implementing a PTR module as we have a need to do PTR lookups with the speed and ability of zdns. I thought it'd be as easy as copying one of the existing modules, such as "A" (modules/a/a.go), renaming it to ptr, renaming the module registration from "A" to "PTR", changing the lookup type to TypePTR and formatting the request properly as reverse-IP.in-addr.arpa. The request goes out, and sniffed via tcpdump I can see that the request is sent properly and the response is correct BUT the output is not correct: (from zdns, below, using my "PTR" module that is implemented exactly as detailed above)

8.8.8.8
{"name":"8.8.8.8","status":"success","data":{"answers":[],"additionals":[],"authorities":[],"protocol":"udp"}}

I can show you the code but its exactly as I described - just a copy of "modules/a/a.go" with the name of the package changed, the hook to register the module changed from "A" to "PTR", and a quick strings.Split() of the IP to construct a "in-addr.arpa" request to send off to the chosen random nameserver.

So - do I need to implement some extra code to handle the response? I thought with the "TypePTR" and PTR requests being implemented in the DNS library that the response would be handled properly. Again I know nothing about Go, and I can't really make sense of what is going on with the code over-all...

Thanks in advance!

better error code use

Right now, we don't set error codes in many places---everything is a generic ERROR. We should go through and label errors correctly so that ZDNS metadata is useful.

CNAME segfault

There seems to be some kind of error in parsing corrupt? CNAME response:

# echo "0000000000.xyz" | zdns A
INFO[0000] no name servers specified. will use: 127.0.1.1:53, 10.230.101.10:53, 192.168.130.100:53, 192.168.130.200:53, 192.168.130.103:53, 192.168.130.205:53, 192.168.130.12:53, 10.230.101.14:53, 10.230.101.12:53, 10.230.101.11:53, 10.230.101.7:53, 10.230.101.1:53, 10.230.101.6:53, 10.230.101.18:53, 10.230.101.20:53
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x5913ce]

goroutine 59 [running]:
panic(0x740d60, 0xc82000e0b0)
        /usr/local/go/src/runtime/panic.go:481 +0x3e6
github.com/zmap/zdns/modules/miekg.parseAnswer(0x7f9053e7b110, 0xc820252780, 0xc82000aac0)
        /go/src/github.com/zmap/zdns/modules/miekg/mkieg.go:58 +0x64e
github.com/zmap/zdns/modules/miekg.DoLookup(0xc8200f2000, 0xc8200f2060, 0xc82000aac0, 0x12, 0x490001, 0xc82010c000, 0xe, 0x0, 0x0, 0x0, ...)
        /go/src/github.com/zmap/zdns/modules/miekg/mkieg.go:101 +0x4aa
github.com/zmap/zdns/modules/a.(*Lookup).DoLookup(0xc8200ee020, 0xc82010c000, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /go/src/github.com/zmap/zdns/modules/a/a.go:32 +0xd2
github.com/zmap/zdns.doLookup(0xc82000ea70, 0xc820088960, 0xc820010660, 0xc8200106c0, 0xc820010720, 0xc82000ec70, 0x0, 0x0)
        /go/src/github.com/zmap/zdns/lookup.go:91 +0x5c2
created by github.com/zmap/zdns.DoLookups
        /go/src/github.com/zmap/zdns/lookup.go:188 +0x2c1

Please stop changing the values of the output!

Note: please check the verbosity patch I just uploaded in the Issues section under the "CLI Option to silence listing of nameservers". It turns out that the verbosity level wasn't being used anywhere, as a) there were no checks on verbosity to decide output, and b) there was no SetLevel() for the logrus class translating the verbosity level to a log level.

Anyway, I have been writing scripts and software that depend on the zdns output yet zdns output has been changing an awful lot lately. First, the change from MX to MXLOOKUP with the way the JSON values were named, and various other small changes that borked the output (I don't remember what they were, but they changed).

And now - a change from a status of "SUCCESS" to "NOERROR". I was wondering why my script wasn't working, and it's because it was checking for SUCCESS. Why change from SUCCESS to NOERROR? Why keep changing output names and values? It's confusing. If it were changed from a major release to major release (version tree), then it may be acceptable. But changing from minor version to minor version consisting mainly of bug fixes and small functionality additions is just crazy. It's making it tough to use the software anytime it's upgraded.

Thanks
Brandon

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.