IPv4 to IPv6 Converter

Type an IPv4 address to see every IPv6 address that carries it, from the IPv4-mapped form in your logs to NAT64 and 6to4, written the RFC 5952 way and in full, each marked in use, rare today or deprecated.

RFC 4291, 6052, 8215 and 3056 layouts · RFC 5952 text · runs in your browser

Read as dotted

The IPv6 addresses that carry 192.0.2.33
Documentation address (RFC 5737)Decimal 3221226017Hex 0xC0000221
IPv4-mapped In useSockets, logs and databases · RFC 4291
NAT64, well-known prefix In useIPv6-only networks reaching IPv4 · RFC 6052Example address: real use needs a global IPv4
Your network's NAT64 prefix In usePrefix and length, as the network announces it · RFC 6052
Add the network's NAT64 prefix
NAT64, local-use block In use/96 shown; the network picks the length · RFC 8215
6to4 Rare todaythe site's /48 · RFC 3056Example address: real use needs a global IPv4
ISATAP Rare todayunder fe80::/64 (any /64 works) · RFC 5214
IPv4-translated Rare todayOld stateless translation (SIIT) · RFC 2765
IPv4-compatible DeprecatedNothing: retired · RFC 4291
Try

Dotted, one number (3221225985), hex or a URL. Converted in your browser; nothing is sent.

How do I convert IPv4 to IPv6?

Write the IPv4 address's 32 bits as two hex groups and put them where an IPv6 format keeps them: for the usual IPv4-mapped form that is after ::ffff:, so 192.0.2.33 becomes ::ffff:c000:221, written ::ffff:192.0.2.33.

Each decimal part becomes two hex digits (192 = c0, 0 = 00, 2 = 02, 33 = 21), and the four pairs make two 16-bit groups. RFC 5952 recommends keeping the dotted form after ::ffff: because it shows what the bits mean.

This only changes how the address is written. It doesn't give a device an IPv6 address or an IPv6 connection; those come from the network.

1Each part in hex192c00002023321
2Two 16-bit groupsc000 : 221c0 00 → c000 · 02 21 → 0221 → 221
3After the prefix::ffff:192.0.2.33= ::ffff:c000:221
192.0.2.33 to its IPv4-mapped form, step by step.
IPv4 to IPv6 converter listing every IPv6 form of 192.0.2.33 with where its 32 bits goIPv4 to IPv6 converter listing every IPv6 form of 192.0.2.33 with where its 32 bits goYour IPv4 in hex192.0.2.33 is c0 00 02 21: the 8 digits every IPv6 form carries.Where the bits goThe same 8 digits move to bits 96–127 for mapped and NAT64, and to bits 16–47 for 6to4.Still in use?In use, rare today or deprecated, from the RFCs and the traffic data.Your network's prefixEnter a NAT64 prefix and length to get the address your translator uses.Short or fullRFC 5952 text, the other spelling under it, and the full 32 digits with one switch.
One IPv4 address in every IPv6 format, with where its 32 bits land and whether the format is still used.

Which IPv6 form should I use?

Use the IPv4-mapped form in software (sockets, logs, databases) and your network's NAT64 prefix on an IPv6-only network; the other forms are rare today or retired.

Mapped addresses never appear on the wire. NAT64 addresses do, and the well-known prefix 64:ff9b::/96 must only carry global IPv4 addresses (RFC 6052). 6to4 needs a public IPv4 address too.

IPv4-compatible addresses are deprecated, and SIIT's IPv4-translated prefix gave way to RFC 6052 prefixes.

FormatUse it forStatus192.0.2.33 becomes
IPv4-mappedRFC 4291Sockets, logs and databasesIn use::ffff:192.0.2.33
NAT64, well-known prefixRFC 6052IPv6-only networks reaching IPv4In use64:ff9b::c000:221
NAT64, local-use blockRFC 8215A network's own NAT64, inside 64:ff9b:1::/48In use64:ff9b:1::c000:221
6to4RFC 3056Automatic tunnels, now rareRare today2002:c000:221::/48
ISATAPRFC 5214Tunnels inside one site, now rareRare todayfe80::5efe:c000:221
IPv4-translatedRFC 2765Old stateless translation (SIIT)Rare today::ffff:0:192.0.2.33
IPv4-compatibleRFC 4291Nothing: retiredDeprecated::c000:221
Every standard IPv6 form of one IPv4 address, with what it's for and whether it's still used.

What is an IPv4-mapped IPv6 address?

It is an IPv4 address written as an IPv6 one: 80 zero bits, 16 one bits, then the 32-bit IPv4 address (::ffff:0:0/96), so software with one IPv6 socket can handle IPv4 peers too.

Mapped addresses live inside software only; IANA marks the block as not forwardable. That has a security side: a packet from ::ffff:127.0.0.1 may pass checks meant for the machine itself, so filters should unmap before comparing (RFC 4942).

Databases recognise them: MySQL's IS_IPV4_MAPPED() accepts the dotted or hex tail, and PostgreSQL prints them in mixed notation.

80 zero bits0000:0000:0000:0000:000016 one bitsffffthe IPv4 address, 32 bits192.0.2.33
inside software accept() → ::ffff:192.0.2.33
on the wire never sent IANA: not forwardable
The 128 bits of ::ffff:192.0.2.33, drawn to scale, and where the form exists.

How does the transition from IPv4 to IPv6 work?

Networks run both protocols side by side (dual stack), and IPv6-only networks reach the IPv4 internet through translation: NAT64 with DNS64, or 464XLAT on phones.

With NAT64, DNS64 builds an AAAA record from a host's A record, and the translator carries the traffic to IPv4. With 464XLAT, a translator on the phone (CLAT) turns the app's IPv4 packets into IPv6, and the provider's NAT64 (PLAT) turns them back into IPv4 on shared public addresses.

The move is about half done: on 22 October 2026, 47.13% of users reached Google over IPv6 (Google), and APNIC Labs counted 43.8% of users worldwide as IPv6-capable.

Three ways IPv6 and IPv4 meet today, and how far adoption has come (22 October 2026).

Can IPv4 and IPv6 talk to each other?

Not directly: an IPv6-only host and an IPv4-only host need a translator between them, such as NAT64 for IPv6 clients reaching IPv4 servers, while dual-stack hosts simply use the protocol the other side has.

The two protocols have different packet formats, so something must rewrite each packet. Stateless translators (SIIT, RFC 7915) map addresses one to one using RFC 6052 prefixes; NAT64 shares IPv4 addresses among many IPv6 clients.

That is why most networks keep both protocols running: a dual-stack device needs no translation at all.

Client ↓ · Server →IPv4 onlyIPv6 onlyDual stack
IPv4 onlyIPv4translator (SIIT)IPv4
IPv6 onlyNAT64 + DNS64IPv6IPv6
Dual stackIPv4IPv6either
Who can reach whom, and what sits in between.

How do I convert IPv4 to IPv6 in code?

Most languages do it in one call: Python's IPv4Address.ipv6_mapped, Go's netip with Is4In6 and Unmap, MySQL's INET6_ATON with IS_IPV4_MAPPED, and PostgreSQL's inet type.

Python 3.13 added ipv6_mapped and prints mapped addresses in dotted form. Go's Addr.String prints ::ffff:192.0.2.33 and Unmap returns the plain IPv4 address. Node's net.isIP() returns 6 for a mapped address, and net.BlockList matches IPv4 rules against it.

› import ipaddress
ipaddress.IPv4Address('192.0.2.33').ipv6_mapped
IPv6Address('::ffff:192.0.2.33')

Python 3.13+

› a := netip.MustParseAddr("::ffff:192.0.2.33")
fmt.Println(a.Is4In6(), a.Unmap())
true 192.0.2.33

Go net/netip

› SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:192.0.2.33'));
1

MySQL 8.4

› SELECT inet '::ffff:192.0.2.33';
::ffff:192.0.2.33

PostgreSQL 16

› net.isIP('::ffff:192.0.2.33')
6

Node.js net

The same IPv4-mapped address in five languages and databases, with what each prints.

Frequently asked questions

What is 192.168.1.1 in IPv6?

Written as an IPv4-mapped address it is ::ffff:192.168.1.1, or ::ffff:c0a8:101 with the last 32 bits in hex. That form lives inside software; it doesn't give the router an IPv6 address. Because 192.168.1.1 is a private address, it must not be used behind NAT64's well-known prefix 64:ff9b::/96, and a 6to4 prefix needs a public IPv4 address.

Does converting IPv4 to IPv6 give my device an IPv6 address?

No. Writing an IPv4 address in IPv6 form only changes how the same 32 bits are written down; your device still has no IPv6 connectivity. An IPv6 address comes from your network: your router or provider hands out a prefix, and your device builds its address from it. The IPv6 Test checks whether your connection has working IPv6.

Which IPv6 form should I store in a database?

Store addresses in binary, not text. MySQL's INET6_ATON returns 16 bytes for IPv6 and 4 for IPv4, and IS_IPV4_MAPPED tells you which IPv6 values are mapped IPv4 addresses. If one column must hold both families as 16 bytes, the IPv4-mapped form ::ffff:a.b.c.d is the standard way to write IPv4 as IPv6. PostgreSQL's inet type stores either family natively.

Is ::ffff:192.0.2.1 the same as ::ffff:c000:201?

Yes. Both spell the same 128 bits; the first writes the last 32 bits as a dotted IPv4 address, the second as two hex groups. RFC 5952 recommends the dotted form for IPv4-mapped addresses, while browsers print the hex form in URLs. Compare addresses as numbers, never as text, so that spellings like these match each other.

Why is 64:ff9b::10.1.1.1 invalid?

Because NAT64's well-known prefix may only carry global IPv4 addresses. RFC 6052 says an address like 64:ff9b::10.1.1.1, which embeds a private IPv4 address, is invalid, and translators must drop packets sent to it. The converter flags the NAT64 row whenever you type a private or other non-global IPv4 address, and the 6to4 row too, because 6to4 needs a public address.

What is the 6to4 address of an IPv4 address?

It is the /48 prefix made of 2002: and the IPv4 address in hex: 192.0.2.33 gives 2002:c000:221::/48, and the site numbered its subnets and hosts inside it. 6to4 needs a public IPv4 address, so private addresses have no valid 6to4 prefix. RFC 7526 retired the public relays that made 6to4 work, and the format is rarely seen today.

How many people use IPv6?

Close to half. On 22 October 2026, 47.13% of users reached Google over IPv6, and APNIC Labs measured 43.8% of users worldwide as IPv6-capable in the 30 days to 21 October 2026, with 40.9% preferring IPv6. The rest still use IPv4 only, which is why networks keep both protocols running side by side or translate between them.

How do IPv6-only phones reach IPv4 websites?

Through 464XLAT. A translator on the phone, the CLAT, turns the app's IPv4 packets into IPv6 statelessly, and the provider's NAT64, the PLAT, turns them back into IPv4 on shared public addresses. For names, DNS64 builds AAAA records from A records, which is why you see addresses like 64:ff9b::c000:221. The phone finds its network's prefix by looking up ipv4only.arpa.

How do I convert IPv4 to IPv6 in Python?

In Python 3.13 and later, ipaddress.IPv4Address('192.0.2.33').ipv6_mapped returns IPv6Address('::ffff:192.0.2.33'). On older versions build it from text: ipaddress.IPv6Address('::ffff:192.0.2.33'). Python prints mapped addresses in dotted form since 3.13 and 3.12.11; older releases print ::ffff:c000:221. Both spellings are the same address, so compare the objects, not the strings.

Is anything I type sent to your server?

No. Every form on this page is computed in your browser, so the results appear as you type. Copying a link puts the address, and any NAT64 prefix you entered, after a # in the URL, a part browsers never send to a server, so whoever opens it sees the same conversion. Only if the page's script fails to load does the Convert button send an ordinary page request.