Home page logo

nmap-dev logo Nmap Development mailing list archives

Re: Gsoc 2011 idea about IPv6
From: Xu Weilin <mzweilin () gmail com>
Date: Thu, 24 Mar 2011 22:21:55 +0800

Hi all,
I have run ipv6.c program on my UBUNTU 10.10 and found some interesting

1) The Traffic Class and Flow Label of IPv6 header cannot be set correctly
with the macro function ip6_pack_hdr() of Libdnet.

In the main() function we write

ip6_pack_hdr1(ip6_hdr, 0x12, 0xabcde, sizeof(packet) - sizeof(*ip6_hdr),
IP_PROTO_HOPOPTS, 13, src[0], dst[0]);

The Traffic Class should be 0x12 and the Flow Label should be 0xabcde, but
the values I captured in Wireshark were 0x10 and 0x0. The reason is that
Libdnet defines a specific operation on ip6->ip6_flow with a flowlabel mask:
ip6->ip6_flow = htonl(((uint32_t)(fc) << 28) & \
    (IP6_FLOWLABEL_MASK | (fl)));

If I replace it with this:
ip6->ip6_flow = htonl(((uint32_t)(fc) << 20) | \
    ( (fl)));
Then the related values will be correct.

Since the flow label may be used for OS detection, we should be careful
about it.

2) send_ipv6_ip() couldn't work on my UBUNTU 10.10.

The sentence below returns '-1'
sd = socket(AF_INET6, SOCK_RAW, hdr->ip6_nxt);

and the next sentence 'perror("socket");'
prints 'socket: Protocol not supported'

This may need more tests.

I prefer to send_ipv6_eth() and send_ipv6_ipproto_raw() since they work well
and they are more powerful.
I'm sorry I have a bad cold this week so that I haven't much time to deal
with the project. I will read the notes.txt and the mentioned papers
carefully in the next few days.

On Tue, Mar 22, 2011 at 7:57 AM, David Fifield <david () bamsoftware com>wrote:

On Sun, Mar 20, 2011 at 11:26:49AM +0800, 许伟林 wrote:
Hi all,
    I'm a college student from Beijing, China. This is my 3rd year of
computer science. I'm very interested in nmap so I would like to apply
the Gsoc 2011 program.
    Actually, I have been researching IPv6 in part time for half a year
got some experiences. Last November, I helped Simon Kelley improve a
of Dnsmasq about IPv6 DNS. (Mail-subject named 'Modification to the
of config-static DNS    record in dual-stack network.' in


That's good. Involvement in other free software projects is good, so be
sure to mention it in your proposal.

    In addition, my team has created a open-source project 'stateful
IPv6-to-IPv6 Network Address Translation (NAPT66)' last month in
http://code.google.com/p/napt66/. NAPT66 has been deployed in several
of middle-box routers and Chinese people can use it to reduce the
cost of accessing Internet.
    I have read the 6 required items of IPv6 support carefully, and got
    For the first 5 items, are the basic theories the same to IPv4's

This is an interesting question. We are not sure, so part of this
project will involve doing research and testing the new possibilities of

For OS detection, there is at least one tool that applies identical
techniques to IPv4 and IPv6 OS detection:
http://www.gomor.org/bin/view/Sinfp. I think we need to research new
tests though. You can see some ideas we've had in the file notes.txt in
       svn co --username guess --password "" svn://

Port scans and traceroute will probably be mostly the same. Something to
think about is the possibility of including extension headers.

    For the 6th item about IPv6 host discovery, I think we have more than
two ways to handle this problem.
    First, we can used a public BGP information to narrow down the IPv6
address space so that 2^128 times of scanning are not necessary.
    Second, we can use the worm's technique to discover all active hosts
a subnet. I recently read a paper about worm exploiting IPv6 network. (A
worm exploiting IPv6 and IPv4-IPv6 dual-stack networks: experiment,
modeling, simulation, and

Thanks, these are good ideas. We've had some others in the ipv6.txt file
I linked above. In some ways I think host discovery on the same subnet
will be easier and more effective than with IPv4 because we can use
multicast to do most of the work. For remote hosts it's harder; I
suspect that we will start relying more on NSE scripts to find targets.

If you like, please comment on the ipv6.c program in the Subversion
directory I linked above. I'm thinking to use its functions as the base
of Nmap's raw IPv6 sending.

David Fifield

Xu Weilin
Beijing University of Posts & Telecommunications
Sent through the nmap-dev mailing list
Archived at http://seclists.org/nmap-dev/

  By Date           By Thread  

Current thread:
[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]