* It seems that `-l' and `-g' will not work correctly together (IPv6). Wait for "flow label" API to be appeared in glibc-kernheaders and think about it immediately after that... :) * Tune default parameters properly. Maybe increase value for the `-N' (sim_probes), maybe decrease `-w' secs to 4.0 instead of 5.0 (as Network is faster now). * Verbose output. Show method in use, what ports we are connecting to, more info about icmp response etc. * The "final hop" issue. All methods, usable when firewalls are present in the network path, normally use some particular destination port. Most often it is a port of an already running application. It requires that the packet sent should be correct for such an application (for example, for tracing with udp to port 53, it should be correct DNS request), and the application normally should answer something on it. (TCP has no such an issue, as there are just syn to, and ack or reset from). In general, we should fill the packet's data depending on the dest port and protocol. It seems not a task for traceroute itself, it could be some cmdline option or even external hook... * Think about SCTP and DCCP methods (these protocols are already in kernel). * Think about "multicast tracerouting" (mrouted(8) and other). The idea is to increase the room in the mtrace packet step-by-step (as well as we increase ttl). It seems that if there is no more space in the probe's room, the mrouted(8) daemon answers immediately, the same way as if it is a final hop. For IPv6 mtrace, there is an RFC draft for this already... * Maybe catch situations when "port unreach" is sent from the same host as last ttl-exceed. It means that the last host is a firewall which filters some udp/tcp ports. It seems that it is better to show some "!x" here, but the original traceroute does not behave so.