Coder Social home page Coder Social logo

hsanet / reverse-traceroute Goto Github PK

View Code? Open in Web Editor NEW
44.0 11.0 4.0 1.62 MB

An implementation of reverse traceroute

License: GNU General Public License v3.0

Python 50.87% Dockerfile 0.25% Shell 0.61% Makefile 1.89% C 46.38%
traceroute network-analysis network-diagnostics network-discovery

reverse-traceroute's People

Contributors

gdluca avatar momorientes avatar vhein99 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reverse-traceroute's Issues

Improvement: Add a flag to transmit without further question

I understand that using --transmit has some security implications. Thus there is a prompt to ensure that the user needs to make an informed decision.

I see a use case for some kind of batch mode. I.e. someone who doesn't want to be prompted for approval.

I can imagine to have some --force-transmit or --transmit -y flag.

Using echo "yes" | augsburg-traceroute --transmit will do the same -- which may be considered as argument pro and contra at the same time.

Build does not work without errors with current version of Ubuntu like 22.04.3

Error:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
poetry 1.1.12 requires keyring<22.0.0,>=21.2.0; python_version >= "3.6" and python_version < "4.0", but you have keyring 23.5.0 which is incompatible.
poetry 1.1.12 requires packaging<21.0,>=20.4, but you have packaging 21.3 which is incompatible.

I only made a short test up to now but the client seems to work for the first test at least in forward direction.

In reverse direction I'm getting:

Virtual-Machine:~/reverse-traceroute/client$ sudo augsburg-traceroute reverse udp multipath d001.eu.prod.t300.ter.int.amazonvideo.com
[sudo] password for tim: 
INFO:src.client:Determined traceroute target: 52.84.106.102
ERROR:src.client:The target did not respond to the reverse traceroute probe.
Virtual-Machine:~/reverse-traceroute/client$ sudo augsburg-traceroute reverse tcp multipath d001.eu.prod.t300.ter.int.amazonvideo.com
INFO:src.client:Determined traceroute target: 52.84.106.84
ERROR:src.client:The target did not respond to the reverse traceroute probe.

But that seems to be something connected to the amazon servers.

Improvement: Accept "y" to proceed transmission of measurement

When using the --transmit flag one gets the following prompt:

Do you want to proceed [Yes/No]:

The capital letters indicate (to me) that it's enough to type y.
Only after looking into the code, I found that I have to type yes.

I suggest to accept y as a positive answer.

many warnings when running on interfaces with no broadcast IP set

For every hop the following messages are repeated when running the client on a host without a configured broadcast address (e.g. when only a /32 is assigned to the interface). This is very noisy and not required.

INFO:src.core.engine:Probing hop with TTL 7
WARNING: more No broadcast address found for iface eth0

WARNING:scapy.runtime:more No broadcast address found for iface eth0

WARNING: No broadcast address found for iface eth0

WARNING:scapy.runtime:No broadcast address found for iface eth0

WARNING: No broadcast address found for iface eth0

WARNING:scapy.runtime:No broadcast address found for iface eth0

WARNING: more No broadcast address found for iface eth0

WARNING:scapy.runtime:more No broadcast address found for iface eth0

Depencies incomplete/incorrect

I tried to compile and run the server on Ubuntu 20.04.
As indicated by the requirements, I installed linux-image-virtual-hwe-20.04 and thus kernel 5.15.0.

After running bash build_docker.sh I got a binary, but I couldn't execute it:

./augsburg-traceroute-server: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./augsburg-traceroute-server)

I think, it's fair to say that running the server requires Ubuntu 22.04 (or maybe later).

enrich data in ENDPOINTS document

To improve public usability I'd suggest moving ENDPOINTS to a CSV file and store operationally relevant information.

Proposal:

DNS;ip4;ip6;ASN;contact
reversetraceroute.globalways.net;94.186.162.74;2a02:c98:1040:5400::6;48918;[email protected]

Reverse traceroute measurements return 0 RTT

This issue highlights a problem in an earlier version and has already been fixed.
If you are heaving this issue, consider fetching the latest server version.

When tracing back from certain endpoints, traces report an Round-Trip-Time of zero across all hops.
This issue arised as the server used packet metadata to retrieve the timestamps needed for RTT computations.
On some machine, these timestamps were not initialized.
The problem was resolved by calling a function to retrieve the timestamps instead of relying on packet metadata.

libbpf: prog 'prog': failed to load: -22

Hi guys,
after the installation process finished, the service failed to run on Debian11.
I know that Debian11 is not the recommended OS for the setup, but maybe we can find a way to get it running.

System:
~# cat /etc/debian_version
11.5

~# uname -a
Linux 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux

Problem:
~/reverse-traceroute/server# ./augsburg-traceroute-server -n 50000 -t 5000000000 enp1s0
libbpf: loading object 'traceroute' from buffer
libbpf: elf: section(2) .text, size 6176, link 0, flags 6, type=1
libbpf: sec '.text': found program 'session_timeout_callback' at insn offset 760 (6080 bytes), code size 12 insns (96 bytes)
libbpf: sec '.text': found program 'log_message' at insn offset 0 (0 bytes), code size 18 insns (144 bytes)
libbpf: sec '.text': found program 'probe_match' at insn offset 18 (144 bytes), code size 67 insns (536 bytes)
libbpf: sec '.text': found program 'probe_create' at insn offset 85 (680 bytes), code size 243 insns (1944 bytes)
libbpf: sec '.text': found program 'resize_l3hdr' at insn offset 328 (2624 bytes), code size 43 insns (344 bytes)
libbpf: sec '.text': found program 'response_create_err' at insn offset 371 (2968 bytes), code size 122 insns (976 bytes)
libbpf: sec '.text': found program 'response_create' at insn offset 493 (3944 bytes), code size 194 insns (1552 bytes)
libbpf: sec '.text': found program 'session_delete' at insn offset 687 (5496 bytes), code size 9 insns (72 bytes)
libbpf: sec '.text': found program 'session_find' at insn offset 696 (5568 bytes), code size 5 insns (40 bytes)
libbpf: sec '.text': found program 'session_add' at insn offset 701 (5608 bytes), code size 59 insns (472 bytes)
libbpf: elf: section(3) .rel.text, size 304, link 28, flags 40, type=9
libbpf: elf: section(4) tc, size 1920, link 0, flags 6, type=1
libbpf: sec 'tc': found program 'prog' at insn offset 0 (0 bytes), code size 240 insns (1920 bytes)
libbpf: elf: section(5) .reltc, size 128, link 28, flags 40, type=9
libbpf: elf: section(6) .maps, size 48, link 0, flags 3, type=1
libbpf: elf: section(7) .rodata, size 8, link 0, flags 2, type=1
libbpf: elf: section(8) license, size 4, link 0, flags 3, type=1
libbpf: license of traceroute is GPL
libbpf: elf: section(19) .BTF, size 11808, link 0, flags 0, type=1
libbpf: elf: section(21) .BTF.ext, size 9488, link 0, flags 0, type=1
libbpf: elf: section(28) .symtab, size 1440, link 1, flags 0, type=2
libbpf: looking for externs among 60 symbols...
libbpf: collected 0 externs total
libbpf: map 'log_buf': at sec_idx 6, offset 0.
libbpf: map 'log_buf': found type = 27.
libbpf: map 'log_buf': found max_entries = 131072.
libbpf: map 'map_sessions': at sec_idx 6, offset 16.
libbpf: map 'map_sessions': found type = 1.
libbpf: map 'map_sessions': found key [14], sz = 8.
libbpf: map 'map_sessions': found value [21], sz = 32.
libbpf: map 'map_sessions': found max_entries = 5000.
libbpf: map 'tracerou.rodata' (global data): at sec_idx 7, offset 0, flags 480.
libbpf: map 2 is "tracerou.rodata"
libbpf: sec '.rel.text': collecting relocation for section(2) '.text'
libbpf: sec '.rel.text': relo #0: insn #2 against 'log_buf'
libbpf: prog 'log_message': found map 0 (log_buf, sec 6, off 0) for insn #2
libbpf: sec '.rel.text': relo #1: insn #102 against 'resize_l3hdr'
libbpf: sec '.rel.text': relo #2: insn #154 against 'resize_l3hdr'
libbpf: sec '.rel.text': relo #3: insn #194 against 'resize_l3hdr'
libbpf: sec '.rel.text': relo #4: insn #384 against 'resize_l3hdr'
libbpf: sec '.rel.text': relo #5: insn #509 against 'resize_l3hdr'
libbpf: sec '.rel.text': relo #6: insn #690 against 'log_message'
libbpf: sec '.rel.text': relo #7: insn #691 against 'map_sessions'
libbpf: prog 'session_delete': found map 1 (map_sessions, sec 6, off 16) for insn #4
libbpf: sec '.rel.text': relo #8: insn #697 against 'map_sessions'
libbpf: prog 'session_find': found map 1 (map_sessions, sec 6, off 16) for insn #1
libbpf: sec '.rel.text': relo #9: insn #708 against 'map_sessions'
libbpf: prog 'session_add': found map 1 (map_sessions, sec 6, off 16) for insn #7
libbpf: sec '.rel.text': relo #10: insn #717 against 'map_sessions'
libbpf: prog 'session_add': found map 1 (map_sessions, sec 6, off 16) for insn #16
libbpf: sec '.rel.text': relo #11: insn #723 against 'map_sessions'
libbpf: prog 'session_add': found map 1 (map_sessions, sec 6, off 16) for insn #22
libbpf: sec '.rel.text': relo #12: insn #734 against 'map_sessions'
libbpf: prog 'session_add': found map 1 (map_sessions, sec 6, off 16) for insn #33
libbpf: sec '.rel.text': relo #13: insn #742 against '.text'
libbpf: sec '.rel.text': relo #14: insn #746 against 'TIMEOUT_NS'
libbpf: prog 'session_add': found data map 2 (tracerou.rodata, sec 7, off 0) for insn 45
libbpf: sec '.rel.text': relo #15: insn #756 against 'log_message'
libbpf: sec '.rel.text': relo #16: insn #762 against 'log_message'
libbpf: sec '.rel.text': relo #17: insn #765 against 'log_message'
libbpf: sec '.rel.text': relo #18: insn #766 against 'map_sessions'
libbpf: prog 'session_timeout_callback': found map 1 (map_sessions, sec 6, off 16) for insn #6
libbpf: sec '.reltc': collecting relocation for section(4) 'tc'
libbpf: sec '.reltc': relo #0: insn #101 against 'probe_create'
libbpf: sec '.reltc': relo #1: insn #112 against 'session_add'
libbpf: sec '.reltc': relo #2: insn #147 against 'probe_match'
libbpf: sec '.reltc': relo #3: insn #154 against 'session_find'
libbpf: sec '.reltc': relo #4: insn #161 against 'log_message'
libbpf: sec '.reltc': relo #5: insn #163 against 'session_delete'
libbpf: sec '.reltc': relo #6: insn #210 against 'response_create'
libbpf: sec '.reltc': relo #7: insn #233 against 'response_create_err'
libbpf: map 'log_buf': created successfully, fd=4
libbpf: map 'map_sessions': created successfully, fd=5
libbpf: map 'tracerou.rodata': created successfully, fd=6
libbpf: prog 'prog': added 243 insns from sub-prog 'probe_create'
libbpf: prog 'prog': added 43 insns from sub-prog 'resize_l3hdr'
libbpf: prog 'probe_create': insn #17 relocated, imm 225 points to subprog 'resize_l3hdr' (now at 483 offset)
libbpf: prog 'probe_create': insn #69 relocated, imm 173 points to subprog 'resize_l3hdr' (now at 483 offset)
libbpf: prog 'probe_create': insn #109 relocated, imm 133 points to subprog 'resize_l3hdr' (now at 483 offset)
libbpf: prog 'prog': insn #101 relocated, imm 138 points to subprog 'probe_create' (now at 240 offset)
libbpf: prog 'prog': added 59 insns from sub-prog 'session_add'
libbpf: prog 'prog': added 12 insns from sub-prog 'session_timeout_callback'
libbpf: prog 'prog': added 18 insns from sub-prog 'log_message'
libbpf: prog 'session_timeout_callback': insn #2 relocated, imm 9 points to subprog 'log_message' (now at 597 offset)
libbpf: prog 'session_timeout_callback': insn #5 relocated, imm 6 points to subprog 'log_message' (now at 597 offset)
libbpf: prog 'session_add': insn #41 relocated, imm 17 points to subprog 'session_timeout_callback' (now at 585 offset)
libbpf: prog 'session_add': insn #55 relocated, imm 15 points to subprog 'log_message' (now at 597 offset)
libbpf: prog 'prog': insn #112 relocated, imm 413 points to subprog 'session_add' (now at 526 offset)
libbpf: prog 'prog': added 67 insns from sub-prog 'probe_match'
libbpf: prog 'prog': insn #147 relocated, imm 467 points to subprog 'probe_match' (now at 615 offset)
libbpf: prog 'prog': added 5 insns from sub-prog 'session_find'
libbpf: prog 'prog': insn #154 relocated, imm 527 points to subprog 'session_find' (now at 682 offset)
libbpf: prog 'prog': insn #161 relocated, imm 435 points to subprog 'log_message' (now at 597 offset)
libbpf: prog 'prog': added 9 insns from sub-prog 'session_delete'
libbpf: prog 'session_delete': insn #3 relocated, imm -94 points to subprog 'log_message' (now at 597 offset)
libbpf: prog 'prog': insn #163 relocated, imm 523 points to subprog 'session_delete' (now at 687 offset)
libbpf: prog 'prog': added 194 insns from sub-prog 'response_create'
libbpf: prog 'response_create': insn #16 relocated, imm -230 points to subprog 'resize_l3hdr' (now at 483 offset)
libbpf: prog 'prog': insn #210 relocated, imm 485 points to subprog 'response_create' (now at 696 offset)
libbpf: prog 'prog': added 122 insns from sub-prog 'response_create_err'
libbpf: prog 'response_create_err': insn #13 relocated, imm -421 points to subprog 'resize_l3hdr' (now at 483 offset)
libbpf: prog 'prog': insn #233 relocated, imm 656 points to subprog 'response_create_err' (now at 890 offset)
libbpf: prog 'prog': BPF program load failed: Invalid argument
libbpf: prog 'prog': -- BEGIN PROG LOAD LOG --
number of funcs in func_info doesn't match number of subprogs
processed 0 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
-- END PROG LOAD LOG --
libbpf: prog 'prog': failed to load: -22
libbpf: failed to load object 'traceroute'
libbpf: failed to load BPF skeleton 'traceroute': -22
Failed to load the program.

If you need any further information, let me know

Running reverse-traceroute-server on OpenWRT

Hi,

I just wanted to share that it is possible to use the compiled build using docker (see README.md).
I successfully built a firmware from Openwrt master branch - x86_64 just by building the LLVM toolchain which includes clang-15.

  • Advanced configuration options (for developers) --->
    BPF toolchain (Build LLVM toolchain for eBPF) --->
    Build LLVM toolchain for eBPF

You can copy the following binary (v6 and v4) to run the server:

augsburg-traceroute-server-v6
augsburg-traceroute-server-v4

Thank you for your work. I hope to see the draft as RFC and implemented across multiple OS/vendors as an additional feature.

Server fails to start with verification error

The server fails to start with the following error at the bottom of the output:

-- END PROG LOAD LOG --
libbpf: prog 'prog': failed to load: -13
libbpf: failed to load object 'traceroute'
libbpf: failed to load BPF skeleton 'traceroute': -13
Failed to load the program.

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.