Git Product home page Git Product logo

ymmv's People

Contributors

shane-kerr avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

ymmv's Issues

"Mark" ymmv-generated packets via edns0 packet-size signature

Suggestion from Kato:

Prior to the release of your program to tap a DNS query to one of
IANA root servers and to send its copy to some/many/all of Yeti
servers, I would suggest to "mark" the copied DNS queries so that
we can identify the copied traffic and "natural" traffic.

When we are to test dynamic features (I mean timing issue is involved
such as a proposed experiment where significant number of Yeti Root
servers intentionally become blackholes to see the performance
degradation to the end customers), the copied packets don't comply
with usual timeout characteristics implemented in every DNS server
(full resolver) implementation.

One of the ways to mark the packet is to change the EDNS packet size
negotiation parameter to a strange number such as 3852 (this is just a
random but it rarely be seen in regular traffic and should not induce
fragments).

This should be easy enough to do.

Make Logging Great Again

The output should be something appealing to an administrator. Ideally we want something nice logged to the screen, maybe with curses, as well as some CSV output that can be used for graph/chart generation.

Provide pre-built binaries

We should have pre-built binaries available for people who do not wish to build the software themselves.

Check for memory leaks

A long running version of ymmv grew to several hundred megabytes. Probably there is a memory leak!

Set source port on lookups

In addition to the EDNS0 buffer size mentioned in issue #1, we can also set the source port on lookups to something predictable.

Unfortunately with the Go DNS library we are using this is non-trivial. It is of course possible, but since it is hard we will give it a low priority.

Query/response matching for better comparisons

With the code now we generate the queries based on the replies. We can do better, and actually remember which queries are sent and then map them to replies. This will mean we need to keep a map of queries, assign replies to them, handle replies without queries, and also handle timeouts for queries that do not get replies.

Probably we can do this by only using (source IP, source port, destination IP, query ID) - at least at the 99.9% level which is good enough for our research purposes.

Semi-obfuscate QNAME

We need an option to partially hide the QNAME. In this case, we use a random label that we expect to get the same answer as the IANA servers.

So, for example if a user was querying for WWW.EXAMPLE.ORG we would send a query for random + .YMMV.EXAMPLE.ORG.

This is only a partial solution since the TLD is still in the query, but we need that for the comparison.

Need to e-mail results: SMTP version

We need a way to tell the tool to e-mail results periodically if desired.

There are two ways to do this:

  1. The "normal" Unix way, asking the local MTA to send the mail, usually by invoking /usr/sbin/sendmail.
  2. Directly via SMTP.

This issue is for the SMTP version. We can use the Go language package for this:

https://golang.org/pkg/net/smtp/

It requires a bit more work in terms of setting up a hostname/port plus username/authentication, plus handling failures, and so on. But it may be useful to users in some cases.

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.