fujiapple852 / trippy

A network diagnostic tool
https://trippy.cli.rs
Apache License 2.0
3.75k stars 80 forks source link

Enriched `dot` report #797

Open fujiapple852 opened 12 months ago

fujiapple852 commented 12 months ago

Enrich the Graphviz dot report:

fujiapple852 commented 12 months ago

Current WIP:

trip -u google.com --tcp -m dot -C 10 | dot -Tpng > path.png

Produces:

path

jmanteau commented 10 months ago

Coming back from #875

it looks nice in the example you linked to. Is that example produced as a DOT file? Do you have the DOT file for reference? I have just done a fresh run, here you go, see below.

I think to do this these reports should become subcommand such that multiple per-subcommand flags could be added I would do "both". Having a switch to activate in one go all the opiniated default. And having the others switchs if people want to add only what they need.

jmanteau commented 10 months ago
### Scapy Multi-Traceroute (MTR) DOT Graph Results (2023-12-20 17:11:46.559516) ###

digraph mtr {
    graph [bgcolor=transparent,ranksep=0.75];
    node [shape="ellipse",fontname="Sans-Serif",fontsize=11,color="black",gradientangle=270,fillcolor="white:#a0a0a0",style="filled"];

    ### ASN Clusters ###
    subgraph cluster_15169 {
        tooltip="AS: 15169 - [Google]";
        color="#608686";
        fillcolor="#60868630";
        style="filled,rounded";
        node [color="#608686",gradientangle=270,fillcolor="white:#608686",style="filled"];
        fontsize=10;
        fontname="Sans-Serif";
        label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B><FONT POINT-SIZE="11">AS: 15169</FONT></B></TD></TR><TR><TD>[Google]</TD></TR></TABLE>>;
        labelloc="t";
        penwidth=3;
        "74.125.147.10" [tooltip="Hop Host: 74.125.147.10"];
        "72.14.204.184" [tooltip="Hop Host: 72.14.204.184"];
        "108.170.244.225" [tooltip="Hop Host: 108.170.244.225"];
        "142.250.234.41" [tooltip="Hop Host: 142.250.234.41"];
        "142.250.234.43" [tooltip="Hop Host: 142.250.234.43"];
        "108.170.244.161" [tooltip="Hop Host: 108.170.244.161"];
        "72.14.202.232" [tooltip="Hop Host: 72.14.202.232"];
        "72.14.218.40" [tooltip="Hop Host: 72.14.218.40"];
        "72.14.210.158" [tooltip="Hop Host: 72.14.210.158"];
        "72.14.233.77" [tooltip="Hop Host: 72.14.233.77"];
        ### MTR Target Cluster ###
        subgraph cluster_142_250_74_228 {
            tooltip="MTR Target: www.google.com";
            color="darkgreen";
            fontsize=11;
            fontname="Sans-Serif";
            gradientangle=270;
            fillcolor="white:#a0a0a0";
            style="filled,rounded";
            penwidth=2;
            label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B>Target: www.google.com</B></TD></TR><TR><TD><FONT POINT-SIZE="9">Hop Ranges (T1: 1 &rarr; 9, T2: 1 &rarr; 9, T5: 1 &rarr; 9, T6: 1 &rarr; 9, T9: 1 &rarr; 9, T10: 1 &rarr; 9)</FONT></TD></TR></TABLE>>;
            labelloc="b";
            "142.250.74.228";
        }
    }
    subgraph cluster_6453 {
        tooltip="AS: 6453 - [TATA Communications]";
        color="#60baba";
        fillcolor="#60baba30";
        style="filled,rounded";
        node [color="#60baba",gradientangle=270,fillcolor="white:#60baba",style="filled"];
        fontsize=10;
        fontname="Sans-Serif";
        label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B><FONT POINT-SIZE="11">AS: 6453</FONT></B></TD></TR><TR><TD>[TATA Communications]</TD></TR></TABLE>>;
        labelloc="t";
        penwidth=3;
        "80.231.245.41" [tooltip="Hop Host: 80.231.245.41"];
        "195.219.50.74" [tooltip="Hop Host: 195.219.50.74"];
        "80.231.246.13" [tooltip="Hop Host: 80.231.246.13"];
        "80.231.246.26" [tooltip="Hop Host: 80.231.246.26"];
    }
    subgraph cluster_14061 {
        tooltip="AS: 14061 - [DigitalOcean]";
        color="#60ffff";
        fillcolor="#60ffff30";
        style="filled,rounded";
        node [color="#60ffff",gradientangle=270,fillcolor="white:#60ffff",style="filled"];
        fontsize=10;
        fontname="Sans-Serif";
        label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B><FONT POINT-SIZE="11">AS: 14061</FONT></B></TD></TR><TR><TD>[DigitalOcean]</TD></TR></TABLE>>;
        labelloc="t";
        penwidth=3;
        "Unk8" [tooltip="Hop Host: Unk8"];
        "Unk9" [tooltip="Hop Host: Unk9"];
        "Unk10" [tooltip="Hop Host: Unk10"];
        "Unk15" [tooltip="Hop Host: Unk15"];
        "Unk16" [tooltip="Hop Host: Unk16"];
        "Unk17" [tooltip="Hop Host: Unk17"];
        ### MTR Target Cluster ###
        subgraph cluster_64_226_122_113 {
            tooltip="MTR Target: openwrt.org";
            color="darkgreen";
            fontsize=11;
            fontname="Sans-Serif";
            gradientangle=270;
            fillcolor="white:#a0a0a0";
            style="filled,rounded";
            penwidth=2;
            label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B>Target: openwrt.org</B></TD></TR><TR><TD><FONT POINT-SIZE="9">Hop Ranges (T3: 1 &rarr; 14, T4: 1 &rarr; 14, T7: 1 &rarr; 14, T8: 1 &rarr; 14, T11: 1 &rarr; 14, T12: 1 &rarr; 14)</FONT></TD></TR></TABLE>>;
            labelloc="b";
            "64.226.122.113";
        }
    }

    ### Probe Target Cluster ###
    subgraph cluster_probe_Title {
        tooltip="Multi-Traceroute (MTR) Probe:  192.168.1.104";
        color="darkorange";
        gradientangle=270;
        fillcolor="white:#a0a0a0";
        style="filled,rounded";
        penwidth=3;
        fontsize=11;
        fontname="Sans-Serif";
        label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD ALIGN="center"><B>Multi-Traceroute (MTR) Probe</B></TD></TR><TR><TD ALIGN="center"><FONT POINT-SIZE="9">2020-02-18 17:00:04</FONT></TD></TR><TR><TD ALIGN="center"><FONT POINT-SIZE="9">Target: www.google.com (142.250.74.228 &rarr; T1, T2, T5, T6, T9, T10)</FONT></TD></TR><TR><TD ALIGN="center"><FONT POINT-SIZE="9">Target: openwrt.org (64.226.122.113 &rarr; T3, T4, T7, T8, T11, T12)</FONT></TD></TR></TABLE>>;
        labelloc="t";
        "192.168.1.104";
    }

    ### Default Gateway Cluster ###
    subgraph cluster_default_gateway {
        tooltip="Default Gateway Host: 192.168.1.1";
        color="goldenrod";
        gradientangle=270;
        fillcolor="white:#b8860b30";
        style="filled,rounded";
        penwidth=3;
        fontsize=11;
        fontname="Sans-Serif";
        label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" ALIGN="center"><TR><TD><B><FONT POINT-SIZE="9">Default Gateway</FONT></B></TD></TR></TABLE>>;
        "192.168.1.1" [shape="diamond",fontname="Sans-Serif",fontsize=11,color="black",gradientangle=270,fillcolor="white:goldenrod",style="rounded,filled",tooltip="Default Gateway Host: 192.168.1.1"];
    }

    ### Probe Begin Traces ###
    "192.168.1.104" [shape="record",color="black",gradientangle=270,fillcolor="white:darkorange",style="filled,rounded",label="Probe: 192.168.1.104\nNetwork Interface: lan0|{TCP: http(80)|{<BT1>T1|<BT3>T3|<BT5>T5|<BT7>T7|<BT9>T9|<BT11>T11}}|{TCP: https(443)|{<BT2>T2|<BT4>T4|<BT6>T6|<BT8>T8|<BT10>T10|<BT12>T12}}",tooltip="Begin Host Probe: 192.168.1.104"];

    ### Target Endpoints ###
    "142.250.74.228" [shape="record",color="black",gradientangle=270,fillcolor="#00ff00:#005400",style="filled,rounded",label="Resolved Target\n142.250.74.228|{{<ET1>T1|<ET5>T5|<ET9>T9}|http(80) SA}|{{<ET2>T2|<ET6>T6|<ET10>T10}|https(443) SA}",tooltip="MTR Resolved Target: 142.250.74.228"];
    "64.226.122.113" [shape="record",color="black",gradientangle=270,fillcolor="#00ff00:#005400",style="filled,rounded",label="Resolved Target\n64.226.122.113|{{<ET3>T3|<ET7>T7|<ET11>T11}|http(80) SA}|{{<ET4>T4|<ET8>T8|<ET12>T12}|https(443) SA}",tooltip="MTR Resolved Target: 64.226.122.113"];

    ### Blackholes ###

    ### ICMP Destination Unreachable Hops ###

    ### Nodes With Padding ###
    "108.170.244.225" [label=<<BR/>108.170.244.225<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "142.250.234.41" [label=<<BR/>142.250.234.41<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "142.250.234.43" [label=<<BR/>142.250.234.43<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "193.252.160.45" [label=<<BR/>193.252.160.45<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "80.231.245.41" [label=<<BR/>80.231.245.41<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "195.219.50.74" [label=<<BR/>195.219.50.74<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "80.231.246.13" [label=<<BR/>80.231.246.13<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];
    "80.231.246.26" [label=<<BR/>80.231.246.26<BR/><FONT POINT-SIZE="8">Padding</FONT>>,shape="box3d",color="black",gradientangle=270,fillcolor="white:red",style="filled,rounded"];

    ### Traces ###
    ### T1 -> ('192.168.1.104', '142.250.74.228', 6, 80) ###
    edge [color="#a07070"];
    "192.168.1.104":BT1:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 2.561ms</FONT>>,edgetooltip="Trace: 1:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (2.561ms))",labeltooltip="Trace: 1:1, RTT: 192.168.1.104 <-> 192.168.1.1 (2.561ms)"];
    "192.168.1.1" -> "Unk0" [edgetooltip="Trace: 1:2, 192.168.1.1 -> Unk0"];
    "Unk0" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 6.709ms</FONT>>,edgetooltip="Trace: 1:3, Unk0 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (6.709ms))",labeltooltip="Trace: 1:3, RTT: 192.168.1.104 <-> 193.253.94.198 (6.709ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 28.852ms</FONT>>,edgetooltip="Trace: 1:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (28.852ms))",labeltooltip="Trace: 1:4, RTT: 192.168.1.104 <-> 193.252.160.53 (28.852ms)"];
    "193.252.160.53" -> "Unk1" [edgetooltip="Trace: 1:5, 193.252.160.53 -> Unk1"];
    "Unk1" -> "74.125.147.10" [label=<<FONT POINT-SIZE="8">&nbsp; 18.251ms</FONT>>,edgetooltip="Trace: 1:6, Unk1 -> 74.125.147.10 (RTT: 192.168.1.104 <-> 74.125.147.10 (18.251ms))",labeltooltip="Trace: 1:6, RTT: 192.168.1.104 <-> 74.125.147.10 (18.251ms)"];
    "74.125.147.10" -> "108.170.244.225" [label=<<FONT POINT-SIZE="8">&nbsp; 16.814ms</FONT>>,edgetooltip="Trace: 1:7, 74.125.147.10 -> 108.170.244.225 (RTT: 192.168.1.104 <-> 108.170.244.225 (16.814ms))",labeltooltip="Trace: 1:7, RTT: 192.168.1.104 <-> 108.170.244.225 (16.814ms)"];
    "108.170.244.225" -> "142.250.234.41" [label=<<FONT POINT-SIZE="8">&nbsp; 162.772ms</FONT>>,edgetooltip="Trace: 1:8, 108.170.244.225 -> 142.250.234.41 (RTT: 192.168.1.104 <-> 142.250.234.41 (162.772ms))",labeltooltip="Trace: 1:8, RTT: 192.168.1.104 <-> 142.250.234.41 (162.772ms)"];
    "142.250.234.41" -> "142.250.74.228":ET1:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 161.942ms</FONT>>,edgetooltip="Trace: 1:9, 142.250.234.41 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (161.942ms))",labeltooltip="Trace: 1:9, RTT: 192.168.1.104 <-> 142.250.74.228 (161.942ms)"];
    ### T2 -> ('192.168.1.104', '142.250.74.228', 6, 443) ###
    edge [color="#a04040"];
    "192.168.1.104":BT2:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 2.865ms</FONT>>,edgetooltip="Trace: 2:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (2.865ms))",labeltooltip="Trace: 2:1, RTT: 192.168.1.104 <-> 192.168.1.1 (2.865ms)"];
    "192.168.1.1" -> "Unk2" [edgetooltip="Trace: 2:2, 192.168.1.1 -> Unk2"];
    "Unk2" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 30.754ms</FONT>>,edgetooltip="Trace: 2:3, Unk2 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (30.754ms))",labeltooltip="Trace: 2:3, RTT: 192.168.1.104 <-> 193.253.94.198 (30.754ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 20.723ms</FONT>>,edgetooltip="Trace: 2:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (20.723ms))",labeltooltip="Trace: 2:4, RTT: 192.168.1.104 <-> 193.252.160.53 (20.723ms)"];
    "193.252.160.53" -> "Unk3" [edgetooltip="Trace: 2:5, 193.252.160.53 -> Unk3"];
    "Unk3" -> "72.14.204.184" [label=<<FONT POINT-SIZE="8">&nbsp; 17.435ms</FONT>>,edgetooltip="Trace: 2:6, Unk3 -> 72.14.204.184 (RTT: 192.168.1.104 <-> 72.14.204.184 (17.435ms))",labeltooltip="Trace: 2:6, RTT: 192.168.1.104 <-> 72.14.204.184 (17.435ms)"];
    "72.14.204.184" -> "108.170.244.225" [label=<<FONT POINT-SIZE="8">&nbsp; 171.199ms</FONT>>,edgetooltip="Trace: 2:7, 72.14.204.184 -> 108.170.244.225 (RTT: 192.168.1.104 <-> 108.170.244.225 (171.199ms))",labeltooltip="Trace: 2:7, RTT: 192.168.1.104 <-> 108.170.244.225 (171.199ms)"];
    "108.170.244.225" -> "142.250.234.43" [label=<<FONT POINT-SIZE="8">&nbsp; 169.621ms</FONT>>,edgetooltip="Trace: 2:8, 108.170.244.225 -> 142.250.234.43 (RTT: 192.168.1.104 <-> 142.250.234.43 (169.621ms))",labeltooltip="Trace: 2:8, RTT: 192.168.1.104 <-> 142.250.234.43 (169.621ms)"];
    "142.250.234.43" -> "142.250.74.228":ET2:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 163.556ms</FONT>>,edgetooltip="Trace: 2:9, 142.250.234.43 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (163.556ms))",labeltooltip="Trace: 2:9, RTT: 192.168.1.104 <-> 142.250.74.228 (163.556ms)"];
    ### T3 -> ('192.168.1.104', '64.226.122.113', 6, 80) ###
    edge [color="#a02020"];
    "192.168.1.104":BT3:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 3.157ms</FONT>>,edgetooltip="Trace: 3:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (3.157ms))",labeltooltip="Trace: 3:1, RTT: 192.168.1.104 <-> 192.168.1.1 (3.157ms)"];
    "192.168.1.1" -> "Unk4" [edgetooltip="Trace: 3:2, 192.168.1.1 -> Unk4"];
    "Unk4" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 7.241ms</FONT>>,edgetooltip="Trace: 3:3, Unk4 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (7.241ms))",labeltooltip="Trace: 3:3, RTT: 192.168.1.104 <-> 193.253.94.198 (7.241ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 55.143ms</FONT>>,edgetooltip="Trace: 3:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (55.143ms))",labeltooltip="Trace: 3:4, RTT: 192.168.1.104 <-> 193.252.160.53 (55.143ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 39.600ms</FONT>>,edgetooltip="Trace: 3:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (39.600ms))",labeltooltip="Trace: 3:5, RTT: 192.168.1.104 <-> 193.252.160.45 (39.600ms)"];
    "193.252.160.45" -> "Unk5" [edgetooltip="Trace: 3:6, 193.252.160.45 -> Unk5"];
    "Unk5" -> "Unk6" [edgetooltip="Trace: 3:7, Unk5 -> Unk6"];
    "Unk6" -> "Unk7" [edgetooltip="Trace: 3:8, Unk6 -> Unk7"];
    "Unk7" -> "80.231.245.41" [label=<<FONT POINT-SIZE="8">&nbsp; 97.607ms</FONT>>,edgetooltip="Trace: 3:9, Unk7 -> 80.231.245.41 (RTT: 192.168.1.104 <-> 80.231.245.41 (97.607ms))",labeltooltip="Trace: 3:9, RTT: 192.168.1.104 <-> 80.231.245.41 (97.607ms)"];
    "80.231.245.41" -> "195.219.50.74" [label=<<FONT POINT-SIZE="8">&nbsp; 67.035ms</FONT>>,edgetooltip="Trace: 3:10, 80.231.245.41 -> 195.219.50.74 (RTT: 192.168.1.104 <-> 195.219.50.74 (67.035ms))",labeltooltip="Trace: 3:10, RTT: 192.168.1.104 <-> 195.219.50.74 (67.035ms)"];
    "195.219.50.74" -> "Unk8" [edgetooltip="Trace: 3:11, 195.219.50.74 -> Unk8"];
    "Unk8" -> "Unk9" [edgetooltip="Trace: 3:12, Unk8 -> Unk9"];
    "Unk9" -> "Unk10" [edgetooltip="Trace: 3:13, Unk9 -> Unk10"];
    "Unk10" -> "64.226.122.113":ET3:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 26.056ms</FONT>>,edgetooltip="Trace: 3:14, Unk10 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (26.056ms))",labeltooltip="Trace: 3:14, RTT: 192.168.1.104 <-> 64.226.122.113 (26.056ms)"];
    ### T4 -> ('192.168.1.104', '64.226.122.113', 6, 443) ###
    edge [color="#7070a0"];
    "192.168.1.104":BT4:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 28.520ms</FONT>>,edgetooltip="Trace: 4:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (28.520ms))",labeltooltip="Trace: 4:1, RTT: 192.168.1.104 <-> 192.168.1.1 (28.520ms)"];
    "192.168.1.1" -> "Unk11" [edgetooltip="Trace: 4:2, 192.168.1.1 -> Unk11"];
    "Unk11" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 75.009ms</FONT>>,edgetooltip="Trace: 4:3, Unk11 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (75.009ms))",labeltooltip="Trace: 4:3, RTT: 192.168.1.104 <-> 193.253.94.198 (75.009ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 45.661ms</FONT>>,edgetooltip="Trace: 4:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (45.661ms))",labeltooltip="Trace: 4:4, RTT: 192.168.1.104 <-> 193.252.160.53 (45.661ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 33.659ms</FONT>>,edgetooltip="Trace: 4:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (33.659ms))",labeltooltip="Trace: 4:5, RTT: 192.168.1.104 <-> 193.252.160.45 (33.659ms)"];
    "193.252.160.45" -> "Unk12" [edgetooltip="Trace: 4:6, 193.252.160.45 -> Unk12"];
    "Unk12" -> "Unk13" [edgetooltip="Trace: 4:7, Unk12 -> Unk13"];
    "Unk13" -> "Unk14" [edgetooltip="Trace: 4:8, Unk13 -> Unk14"];
    "Unk14" -> "80.231.245.41" [label=<<FONT POINT-SIZE="8">&nbsp; 76.770ms</FONT>>,edgetooltip="Trace: 4:9, Unk14 -> 80.231.245.41 (RTT: 192.168.1.104 <-> 80.231.245.41 (76.770ms))",labeltooltip="Trace: 4:9, RTT: 192.168.1.104 <-> 80.231.245.41 (76.770ms)"];
    "80.231.245.41" -> "195.219.50.74" [label=<<FONT POINT-SIZE="8">&nbsp; 60.944ms</FONT>>,edgetooltip="Trace: 4:10, 80.231.245.41 -> 195.219.50.74 (RTT: 192.168.1.104 <-> 195.219.50.74 (60.944ms))",labeltooltip="Trace: 4:10, RTT: 192.168.1.104 <-> 195.219.50.74 (60.944ms)"];
    "195.219.50.74" -> "Unk15" [edgetooltip="Trace: 4:11, 195.219.50.74 -> Unk15"];
    "Unk15" -> "Unk16" [edgetooltip="Trace: 4:12, Unk15 -> Unk16"];
    "Unk16" -> "Unk17" [edgetooltip="Trace: 4:13, Unk16 -> Unk17"];
    "Unk17" -> "64.226.122.113":ET4:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 25.974ms</FONT>>,edgetooltip="Trace: 4:14, Unk17 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (25.974ms))",labeltooltip="Trace: 4:14, RTT: 192.168.1.104 <-> 64.226.122.113 (25.974ms)"];
    ### T5 -> ('192.168.1.104', '142.250.74.228', 6, 80) ###
    edge [color="#704070"];
    "192.168.1.104":BT5:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 3.353ms</FONT>>,edgetooltip="Trace: 5:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (3.353ms))",labeltooltip="Trace: 5:1, RTT: 192.168.1.104 <-> 192.168.1.1 (3.353ms)"];
    "192.168.1.1" -> "Unk18" [edgetooltip="Trace: 5:2, 192.168.1.1 -> Unk18"];
    "Unk18" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 149.808ms</FONT>>,edgetooltip="Trace: 5:3, Unk18 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (149.808ms))",labeltooltip="Trace: 5:3, RTT: 192.168.1.104 <-> 193.253.94.198 (149.808ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 132.370ms</FONT>>,edgetooltip="Trace: 5:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (132.370ms))",labeltooltip="Trace: 5:4, RTT: 192.168.1.104 <-> 193.252.160.53 (132.370ms)"];
    "193.252.160.53" -> "Unk19" [edgetooltip="Trace: 5:5, 193.252.160.53 -> Unk19"];
    "Unk19" -> "72.14.202.232" [label=<<FONT POINT-SIZE="8">&nbsp; 89.702ms</FONT>>,edgetooltip="Trace: 5:6, Unk19 -> 72.14.202.232 (RTT: 192.168.1.104 <-> 72.14.202.232 (89.702ms))",labeltooltip="Trace: 5:6, RTT: 192.168.1.104 <-> 72.14.202.232 (89.702ms)"];
    "72.14.202.232" -> "108.170.244.161" [label=<<FONT POINT-SIZE="8">&nbsp; 74.415ms</FONT>>,edgetooltip="Trace: 5:7, 72.14.202.232 -> 108.170.244.161 (RTT: 192.168.1.104 <-> 108.170.244.161 (74.415ms))",labeltooltip="Trace: 5:7, RTT: 192.168.1.104 <-> 108.170.244.161 (74.415ms)"];
    "108.170.244.161" -> "142.250.234.43" [label=<<FONT POINT-SIZE="8">&nbsp; 51.894ms</FONT>>,edgetooltip="Trace: 5:8, 108.170.244.161 -> 142.250.234.43 (RTT: 192.168.1.104 <-> 142.250.234.43 (51.894ms))",labeltooltip="Trace: 5:8, RTT: 192.168.1.104 <-> 142.250.234.43 (51.894ms)"];
    "142.250.234.43" -> "142.250.74.228":ET5:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 33.466ms</FONT>>,edgetooltip="Trace: 5:9, 142.250.234.43 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (33.466ms))",labeltooltip="Trace: 5:9, RTT: 192.168.1.104 <-> 142.250.74.228 (33.466ms)"];
    ### T6 -> ('192.168.1.104', '142.250.74.228', 6, 443) ###
    edge [color="#702040"];
    "192.168.1.104":BT6:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 2.392ms</FONT>>,edgetooltip="Trace: 6:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (2.392ms))",labeltooltip="Trace: 6:1, RTT: 192.168.1.104 <-> 192.168.1.1 (2.392ms)"];
    "192.168.1.1" -> "Unk20" [edgetooltip="Trace: 6:2, 192.168.1.1 -> Unk20"];
    "Unk20" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 140.917ms</FONT>>,edgetooltip="Trace: 6:3, Unk20 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (140.917ms))",labeltooltip="Trace: 6:3, RTT: 192.168.1.104 <-> 193.253.94.198 (140.917ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 113.681ms</FONT>>,edgetooltip="Trace: 6:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (113.681ms))",labeltooltip="Trace: 6:4, RTT: 192.168.1.104 <-> 193.252.160.53 (113.681ms)"];
    "193.252.160.53" -> "Unk21" [edgetooltip="Trace: 6:5, 193.252.160.53 -> Unk21"];
    "Unk21" -> "72.14.202.232" [label=<<FONT POINT-SIZE="8">&nbsp; 82.061ms</FONT>>,edgetooltip="Trace: 6:6, Unk21 -> 72.14.202.232 (RTT: 192.168.1.104 <-> 72.14.202.232 (82.061ms))",labeltooltip="Trace: 6:6, RTT: 192.168.1.104 <-> 72.14.202.232 (82.061ms)"];
    "72.14.202.232" -> "108.170.244.161" [label=<<FONT POINT-SIZE="8">&nbsp; 58.330ms</FONT>>,edgetooltip="Trace: 6:7, 72.14.202.232 -> 108.170.244.161 (RTT: 192.168.1.104 <-> 108.170.244.161 (58.330ms))",labeltooltip="Trace: 6:7, RTT: 192.168.1.104 <-> 108.170.244.161 (58.330ms)"];
    "108.170.244.161" -> "142.250.234.41" [label=<<FONT POINT-SIZE="8">&nbsp; 45.056ms</FONT>>,edgetooltip="Trace: 6:8, 108.170.244.161 -> 142.250.234.41 (RTT: 192.168.1.104 <-> 142.250.234.41 (45.056ms))",labeltooltip="Trace: 6:8, RTT: 192.168.1.104 <-> 142.250.234.41 (45.056ms)"];
    "142.250.234.41" -> "142.250.74.228":ET6:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 28.591ms</FONT>>,edgetooltip="Trace: 6:9, 142.250.234.41 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (28.591ms))",labeltooltip="Trace: 6:9, RTT: 192.168.1.104 <-> 142.250.74.228 (28.591ms)"];
    ### T7 -> ('192.168.1.104', '64.226.122.113', 6, 80) ###
    edge [color="#70a020"];
    "192.168.1.104":BT7:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 3.698ms</FONT>>,edgetooltip="Trace: 7:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (3.698ms))",labeltooltip="Trace: 7:1, RTT: 192.168.1.104 <-> 192.168.1.1 (3.698ms)"];
    "192.168.1.1" -> "Unk22" [edgetooltip="Trace: 7:2, 192.168.1.1 -> Unk22"];
    "Unk22" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 35.026ms</FONT>>,edgetooltip="Trace: 7:3, Unk22 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (35.026ms))",labeltooltip="Trace: 7:3, RTT: 192.168.1.104 <-> 193.253.94.198 (35.026ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 103.679ms</FONT>>,edgetooltip="Trace: 7:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (103.679ms))",labeltooltip="Trace: 7:4, RTT: 192.168.1.104 <-> 193.252.160.53 (103.679ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 398.360ms</FONT>>,edgetooltip="Trace: 7:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (398.360ms))",labeltooltip="Trace: 7:5, RTT: 192.168.1.104 <-> 193.252.160.45 (398.360ms)"];
    "193.252.160.45" -> "Unk23" [edgetooltip="Trace: 7:6, 193.252.160.45 -> Unk23"];
    "Unk23" -> "Unk24" [edgetooltip="Trace: 7:7, Unk23 -> Unk24"];
    "Unk24" -> "Unk25" [edgetooltip="Trace: 7:8, Unk24 -> Unk25"];
    "Unk25" -> "Unk26" [edgetooltip="Trace: 7:9, Unk25 -> Unk26"];
    "Unk26" -> "Unk27" [edgetooltip="Trace: 7:10, Unk26 -> Unk27"];
    "Unk27" -> "Unk28" [edgetooltip="Trace: 7:11, Unk27 -> Unk28"];
    "Unk28" -> "Unk29" [edgetooltip="Trace: 7:12, Unk28 -> Unk29"];
    "Unk29" -> "Unk30" [edgetooltip="Trace: 7:13, Unk29 -> Unk30"];
    "Unk30" -> "64.226.122.113":ET7:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 262.554ms</FONT>>,edgetooltip="Trace: 7:14, Unk30 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (262.554ms))",labeltooltip="Trace: 7:14, RTT: 192.168.1.104 <-> 64.226.122.113 (262.554ms)"];
    ### T8 -> ('192.168.1.104', '64.226.122.113', 6, 443) ###
    edge [color="#4040a0"];
    "192.168.1.104":BT8:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 7.850ms</FONT>>,edgetooltip="Trace: 8:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (7.850ms))",labeltooltip="Trace: 8:1, RTT: 192.168.1.104 <-> 192.168.1.1 (7.850ms)"];
    "192.168.1.1" -> "Unk31" [edgetooltip="Trace: 8:2, 192.168.1.1 -> Unk31"];
    "Unk31" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 114.024ms</FONT>>,edgetooltip="Trace: 8:3, Unk31 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (114.024ms))",labeltooltip="Trace: 8:3, RTT: 192.168.1.104 <-> 193.253.94.198 (114.024ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 98.112ms</FONT>>,edgetooltip="Trace: 8:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (98.112ms))",labeltooltip="Trace: 8:4, RTT: 192.168.1.104 <-> 193.252.160.53 (98.112ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 391.118ms</FONT>>,edgetooltip="Trace: 8:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (391.118ms))",labeltooltip="Trace: 8:5, RTT: 192.168.1.104 <-> 193.252.160.45 (391.118ms)"];
    "193.252.160.45" -> "Unk32" [edgetooltip="Trace: 8:6, 193.252.160.45 -> Unk32"];
    "Unk32" -> "Unk33" [edgetooltip="Trace: 8:7, Unk32 -> Unk33"];
    "Unk33" -> "80.231.246.13" [label=<<FONT POINT-SIZE="8">&nbsp; 351.764ms</FONT>>,edgetooltip="Trace: 8:8, Unk33 -> 80.231.246.13 (RTT: 192.168.1.104 <-> 80.231.246.13 (351.764ms))",labeltooltip="Trace: 8:8, RTT: 192.168.1.104 <-> 80.231.246.13 (351.764ms)"];
    "80.231.246.13" -> "Unk34" [edgetooltip="Trace: 8:9, 80.231.246.13 -> Unk34"];
    "Unk34" -> "Unk35" [edgetooltip="Trace: 8:10, Unk34 -> Unk35"];
    "Unk35" -> "Unk36" [edgetooltip="Trace: 8:11, Unk35 -> Unk36"];
    "Unk36" -> "Unk37" [edgetooltip="Trace: 8:12, Unk36 -> Unk37"];
    "Unk37" -> "Unk38" [edgetooltip="Trace: 8:13, Unk37 -> Unk38"];
    "Unk38" -> "64.226.122.113":ET8:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 214.745ms</FONT>>,edgetooltip="Trace: 8:14, Unk38 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (214.745ms))",labeltooltip="Trace: 8:14, RTT: 192.168.1.104 <-> 64.226.122.113 (214.745ms)"];
    ### T9 -> ('192.168.1.104', '142.250.74.228', 6, 80) ###
    edge [color="#402070"];
    "192.168.1.104":BT9:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 99.335ms</FONT>>,edgetooltip="Trace: 9:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (99.335ms))",labeltooltip="Trace: 9:1, RTT: 192.168.1.104 <-> 192.168.1.1 (99.335ms)"];
    "192.168.1.1" -> "Unk39" [edgetooltip="Trace: 9:2, 192.168.1.1 -> Unk39"];
    "Unk39" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 31.408ms</FONT>>,edgetooltip="Trace: 9:3, Unk39 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (31.408ms))",labeltooltip="Trace: 9:3, RTT: 192.168.1.104 <-> 193.253.94.198 (31.408ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 48.031ms</FONT>>,edgetooltip="Trace: 9:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (48.031ms))",labeltooltip="Trace: 9:4, RTT: 192.168.1.104 <-> 193.252.160.53 (48.031ms)"];
    "193.252.160.53" -> "Unk40" [edgetooltip="Trace: 9:5, 193.252.160.53 -> Unk40"];
    "Unk40" -> "72.14.218.40" [label=<<FONT POINT-SIZE="8">&nbsp; 30.158ms</FONT>>,edgetooltip="Trace: 9:6, Unk40 -> 72.14.218.40 (RTT: 192.168.1.104 <-> 72.14.218.40 (30.158ms))",labeltooltip="Trace: 9:6, RTT: 192.168.1.104 <-> 72.14.218.40 (30.158ms)"];
    "72.14.218.40" -> "108.170.244.161" [label=<<FONT POINT-SIZE="8">&nbsp; 16.923ms</FONT>>,edgetooltip="Trace: 9:7, 72.14.218.40 -> 108.170.244.161 (RTT: 192.168.1.104 <-> 108.170.244.161 (16.923ms))",labeltooltip="Trace: 9:7, RTT: 192.168.1.104 <-> 108.170.244.161 (16.923ms)"];
    "108.170.244.161" -> "142.250.234.41" [label=<<FONT POINT-SIZE="8">&nbsp; 18.335ms</FONT>>,edgetooltip="Trace: 9:8, 108.170.244.161 -> 142.250.234.41 (RTT: 192.168.1.104 <-> 142.250.234.41 (18.335ms))",labeltooltip="Trace: 9:8, RTT: 192.168.1.104 <-> 142.250.234.41 (18.335ms)"];
    "142.250.234.41" -> "142.250.74.228":ET9:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 17.244ms</FONT>>,edgetooltip="Trace: 9:9, 142.250.234.41 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (17.244ms))",labeltooltip="Trace: 9:9, RTT: 192.168.1.104 <-> 142.250.74.228 (17.244ms)"];
    ### T10 -> ('192.168.1.104', '142.250.74.228', 6, 443) ###
    edge [color="#40a040"];
    "192.168.1.104":BT10:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 84.860ms</FONT>>,edgetooltip="Trace: 10:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (84.860ms))",labeltooltip="Trace: 10:1, RTT: 192.168.1.104 <-> 192.168.1.1 (84.860ms)"];
    "192.168.1.1" -> "Unk41" [edgetooltip="Trace: 10:2, 192.168.1.1 -> Unk41"];
    "Unk41" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 23.888ms</FONT>>,edgetooltip="Trace: 10:3, Unk41 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (23.888ms))",labeltooltip="Trace: 10:3, RTT: 192.168.1.104 <-> 193.253.94.198 (23.888ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 39.121ms</FONT>>,edgetooltip="Trace: 10:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (39.121ms))",labeltooltip="Trace: 10:4, RTT: 192.168.1.104 <-> 193.252.160.53 (39.121ms)"];
    "193.252.160.53" -> "Unk42" [edgetooltip="Trace: 10:5, 193.252.160.53 -> Unk42"];
    "Unk42" -> "72.14.210.158" [label=<<FONT POINT-SIZE="8">&nbsp; 17.921ms</FONT>>,edgetooltip="Trace: 10:6, Unk42 -> 72.14.210.158 (RTT: 192.168.1.104 <-> 72.14.210.158 (17.921ms))",labeltooltip="Trace: 10:6, RTT: 192.168.1.104 <-> 72.14.210.158 (17.921ms)"];
    "72.14.210.158" -> "72.14.233.77" [label=<<FONT POINT-SIZE="8">&nbsp; 18.740ms</FONT>>,edgetooltip="Trace: 10:7, 72.14.210.158 -> 72.14.233.77 (RTT: 192.168.1.104 <-> 72.14.233.77 (18.740ms))",labeltooltip="Trace: 10:7, RTT: 192.168.1.104 <-> 72.14.233.77 (18.740ms)"];
    "72.14.233.77" -> "142.250.234.41" [label=<<FONT POINT-SIZE="8">&nbsp; 19.503ms</FONT>>,edgetooltip="Trace: 10:8, 72.14.233.77 -> 142.250.234.41 (RTT: 192.168.1.104 <-> 142.250.234.41 (19.503ms))",labeltooltip="Trace: 10:8, RTT: 192.168.1.104 <-> 142.250.234.41 (19.503ms)"];
    "142.250.234.41" -> "142.250.74.228":ET10:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 17.730ms</FONT>>,edgetooltip="Trace: 10:9, 142.250.234.41 -> 142.250.74.228 (RTT: 192.168.1.104 <-> 142.250.74.228 (17.730ms))",labeltooltip="Trace: 10:9, RTT: 192.168.1.104 <-> 142.250.74.228 (17.730ms)"];
    ### T11 -> ('192.168.1.104', '64.226.122.113', 6, 80) ###
    edge [color="#407020"];
    "192.168.1.104":BT11:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 2.762ms</FONT>>,edgetooltip="Trace: 11:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (2.762ms))",labeltooltip="Trace: 11:1, RTT: 192.168.1.104 <-> 192.168.1.1 (2.762ms)"];
    "192.168.1.1" -> "Unk43" [edgetooltip="Trace: 11:2, 192.168.1.1 -> Unk43"];
    "Unk43" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 37.762ms</FONT>>,edgetooltip="Trace: 11:3, Unk43 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (37.762ms))",labeltooltip="Trace: 11:3, RTT: 192.168.1.104 <-> 193.253.94.198 (37.762ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 14.929ms</FONT>>,edgetooltip="Trace: 11:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (14.929ms))",labeltooltip="Trace: 11:4, RTT: 192.168.1.104 <-> 193.252.160.53 (14.929ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 12.022ms</FONT>>,edgetooltip="Trace: 11:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (12.022ms))",labeltooltip="Trace: 11:5, RTT: 192.168.1.104 <-> 193.252.160.45 (12.022ms)"];
    "193.252.160.45" -> "Unk44" [edgetooltip="Trace: 11:6, 193.252.160.45 -> Unk44"];
    "Unk44" -> "Unk45" [edgetooltip="Trace: 11:7, Unk44 -> Unk45"];
    "Unk45" -> "Unk46" [edgetooltip="Trace: 11:8, Unk45 -> Unk46"];
    "Unk46" -> "80.231.245.41" [label=<<FONT POINT-SIZE="8">&nbsp; 105.153ms</FONT>>,edgetooltip="Trace: 11:9, Unk46 -> 80.231.245.41 (RTT: 192.168.1.104 <-> 80.231.245.41 (105.153ms))",labeltooltip="Trace: 11:9, RTT: 192.168.1.104 <-> 80.231.245.41 (105.153ms)"];
    "80.231.245.41" -> "Unk47" [edgetooltip="Trace: 11:10, 80.231.245.41 -> Unk47"];
    "Unk47" -> "Unk48" [edgetooltip="Trace: 11:11, Unk47 -> Unk48"];
    "Unk48" -> "Unk49" [edgetooltip="Trace: 11:12, Unk48 -> Unk49"];
    "Unk49" -> "Unk50" [edgetooltip="Trace: 11:13, Unk49 -> Unk50"];
    "Unk50" -> "64.226.122.113":ET11:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 49.476ms</FONT>>,edgetooltip="Trace: 11:14, Unk50 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (49.476ms))",labeltooltip="Trace: 11:14, RTT: 192.168.1.104 <-> 64.226.122.113 (49.476ms)"];
    ### T12 -> ('192.168.1.104', '64.226.122.113', 6, 443) ###
    edge [color="#2020a0"];
    "192.168.1.104":BT12:s -> "192.168.1.1" [label=<<FONT POINT-SIZE="8">&nbsp; 5.344ms</FONT>>,edgetooltip="Trace: 12:1, 192.168.1.104 -> 192.168.1.1 (RTT: 192.168.1.104 <-> 192.168.1.1 (5.344ms))",labeltooltip="Trace: 12:1, RTT: 192.168.1.104 <-> 192.168.1.1 (5.344ms)"];
    "192.168.1.1" -> "Unk51" [edgetooltip="Trace: 12:2, 192.168.1.1 -> Unk51"];
    "Unk51" -> "193.253.94.198" [label=<<FONT POINT-SIZE="8">&nbsp; 29.283ms</FONT>>,edgetooltip="Trace: 12:3, Unk51 -> 193.253.94.198 (RTT: 192.168.1.104 <-> 193.253.94.198 (29.283ms))",labeltooltip="Trace: 12:3, RTT: 192.168.1.104 <-> 193.253.94.198 (29.283ms)"];
    "193.253.94.198" -> "193.252.160.53" [label=<<FONT POINT-SIZE="8">&nbsp; 10.805ms</FONT>>,edgetooltip="Trace: 12:4, 193.253.94.198 -> 193.252.160.53 (RTT: 192.168.1.104 <-> 193.252.160.53 (10.805ms))",labeltooltip="Trace: 12:4, RTT: 192.168.1.104 <-> 193.252.160.53 (10.805ms)"];
    "193.252.160.53" -> "193.252.160.45" [label=<<FONT POINT-SIZE="8">&nbsp; 12.579ms</FONT>>,edgetooltip="Trace: 12:5, 193.252.160.53 -> 193.252.160.45 (RTT: 192.168.1.104 <-> 193.252.160.45 (12.579ms))",labeltooltip="Trace: 12:5, RTT: 192.168.1.104 <-> 193.252.160.45 (12.579ms)"];
    "193.252.160.45" -> "Unk52" [edgetooltip="Trace: 12:6, 193.252.160.45 -> Unk52"];
    "Unk52" -> "80.231.246.26" [label=<<FONT POINT-SIZE="8">&nbsp; 39.247ms</FONT>>,edgetooltip="Trace: 12:7, Unk52 -> 80.231.246.26 (RTT: 192.168.1.104 <-> 80.231.246.26 (39.247ms))",labeltooltip="Trace: 12:7, RTT: 192.168.1.104 <-> 80.231.246.26 (39.247ms)"];
    "80.231.246.26" -> "Unk53" [edgetooltip="Trace: 12:8, 80.231.246.26 -> Unk53"];
    "Unk53" -> "Unk54" [edgetooltip="Trace: 12:9, Unk53 -> Unk54"];
    "Unk54" -> "Unk55" [edgetooltip="Trace: 12:10, Unk54 -> Unk55"];
    "Unk55" -> "Unk56" [edgetooltip="Trace: 12:11, Unk55 -> Unk56"];
    "Unk56" -> "Unk57" [edgetooltip="Trace: 12:12, Unk56 -> Unk57"];
    "Unk57" -> "Unk58" [edgetooltip="Trace: 12:13, Unk57 -> Unk58"];
    "Unk58" -> "64.226.122.113":ET12:n [style="solid",label=<<FONT POINT-SIZE="8">&nbsp; 42.210ms</FONT>>,edgetooltip="Trace: 12:14, Unk58 -> 64.226.122.113 (RTT: 192.168.1.104 <-> 64.226.122.113 (42.210ms))",labeltooltip="Trace: 12:14, RTT: 192.168.1.104 <-> 64.226.122.113 (42.210ms)"];

    ### Decoration For Unknown (Unkn) Node Hops ###
    "Unk0" [tooltip="Trace: 1:2, Unknown Hop: Unk0",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk1" [tooltip="Trace: 1:5, Unknown Hop: Unk1",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk2" [tooltip="Trace: 2:2, Unknown Hop: Unk2",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk3" [tooltip="Trace: 2:5, Unknown Hop: Unk3",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk4" [tooltip="Trace: 3:2, Unknown Hop: Unk4",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk5" [tooltip="Trace: 3:6, Unknown Hop: Unk5",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk6" [tooltip="Trace: 3:7, Unknown Hop: Unk6",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk7" [tooltip="Trace: 3:8, Unknown Hop: Unk7",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk8" [tooltip="Trace: 3:11, Unknown Hop: Unk8",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk9" [tooltip="Trace: 3:12, Unknown Hop: Unk9",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk10" [tooltip="Trace: 3:13, Unknown Hop: Unk10",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk11" [tooltip="Trace: 4:2, Unknown Hop: Unk11",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk12" [tooltip="Trace: 4:6, Unknown Hop: Unk12",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk13" [tooltip="Trace: 4:7, Unknown Hop: Unk13",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk14" [tooltip="Trace: 4:8, Unknown Hop: Unk14",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk15" [tooltip="Trace: 4:11, Unknown Hop: Unk15",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk16" [tooltip="Trace: 4:12, Unknown Hop: Unk16",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk17" [tooltip="Trace: 4:13, Unknown Hop: Unk17",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk18" [tooltip="Trace: 5:2, Unknown Hop: Unk18",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk19" [tooltip="Trace: 5:5, Unknown Hop: Unk19",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk20" [tooltip="Trace: 6:2, Unknown Hop: Unk20",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk21" [tooltip="Trace: 6:5, Unknown Hop: Unk21",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk22" [tooltip="Trace: 7:2, Unknown Hop: Unk22",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk23" [tooltip="Trace: 7:6, Unknown Hop: Unk23",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk24" [tooltip="Trace: 7:7, Unknown Hop: Unk24",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk25" [tooltip="Trace: 7:8, Unknown Hop: Unk25",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk26" [tooltip="Trace: 7:9, Unknown Hop: Unk26",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk27" [tooltip="Trace: 7:10, Unknown Hop: Unk27",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk28" [tooltip="Trace: 7:11, Unknown Hop: Unk28",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk29" [tooltip="Trace: 7:12, Unknown Hop: Unk29",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk30" [tooltip="Trace: 7:13, Unknown Hop: Unk30",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk31" [tooltip="Trace: 8:2, Unknown Hop: Unk31",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk32" [tooltip="Trace: 8:6, Unknown Hop: Unk32",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk33" [tooltip="Trace: 8:7, Unknown Hop: Unk33",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk34" [tooltip="Trace: 8:9, Unknown Hop: Unk34",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk35" [tooltip="Trace: 8:10, Unknown Hop: Unk35",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk36" [tooltip="Trace: 8:11, Unknown Hop: Unk36",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk37" [tooltip="Trace: 8:12, Unknown Hop: Unk37",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk38" [tooltip="Trace: 8:13, Unknown Hop: Unk38",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk39" [tooltip="Trace: 9:2, Unknown Hop: Unk39",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk40" [tooltip="Trace: 9:5, Unknown Hop: Unk40",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk41" [tooltip="Trace: 10:2, Unknown Hop: Unk41",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk42" [tooltip="Trace: 10:5, Unknown Hop: Unk42",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk43" [tooltip="Trace: 11:2, Unknown Hop: Unk43",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk44" [tooltip="Trace: 11:6, Unknown Hop: Unk44",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk45" [tooltip="Trace: 11:7, Unknown Hop: Unk45",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk46" [tooltip="Trace: 11:8, Unknown Hop: Unk46",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk47" [tooltip="Trace: 11:10, Unknown Hop: Unk47",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk48" [tooltip="Trace: 11:11, Unknown Hop: Unk48",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk49" [tooltip="Trace: 11:12, Unknown Hop: Unk49",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk50" [tooltip="Trace: 11:13, Unknown Hop: Unk50",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk51" [tooltip="Trace: 12:2, Unknown Hop: Unk51",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk52" [tooltip="Trace: 12:6, Unknown Hop: Unk52",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk53" [tooltip="Trace: 12:8, Unknown Hop: Unk53",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk54" [tooltip="Trace: 12:9, Unknown Hop: Unk54",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk55" [tooltip="Trace: 12:10, Unknown Hop: Unk55",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk56" [tooltip="Trace: 12:11, Unknown Hop: Unk56",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk57" [tooltip="Trace: 12:12, Unknown Hop: Unk57",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];
    "Unk58" [tooltip="Trace: 12:13, Unknown Hop: Unk58",shape="egg",fontname="Sans-Serif",fontsize=9,height=0.2,width=0.2,color="black",gradientangle=270,fillcolor="white:#d8d8d8",style="filled"];

    ### Tooltip for Standalone Node Hops ###
    "193.253.94.198" [tooltip="Hop Host: 193.253.94.198"];
    "193.252.160.53" [tooltip="Hop Host: 193.252.160.53"];
    "193.252.160.45" [tooltip="Hop Host: 193.252.160.45"];
}
fujiapple852 commented 10 months ago

That's great! I should be able to emulate something akin to that.

One challenge here is the treatment of "unknown" nodes, Trippy currently conflates all unknown nodes into a single node as part of the DOT report which can be misleading when there are actually multiple unknown nodes. I think the options are to have:

The 1st option is what Trippy does today which isn't great. It appear from the example you have shared that Scapy chooses the 3rd option which leads to a lot of "duplicate" unknown nodes (58 in your example). Perhaps the 2nd option is a good compromise? Again, this would be something that would be nice to expose to users as an option as there seems to be no clear "right" answer.