• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Codemotion Magazine

We code the future. Together

  • Discover
    • Events
    • Community
    • Partners
    • Become a partner
    • Hackathons
  • Magazine
    • Backend
    • Frontend
    • AI/ML
    • DevOps
    • Dev Life
    • Soft Skills
    • Infographics
  • Talent
    • Discover Talent
    • Jobs
    • Manifesto
  • Companies
  • For Business
    • EN
    • IT
    • ES
  • Sign in

Grace LauJanuary 9, 2023

How to Validate an IP Address Using Python

Languages and frameworks
Python, data science libraries.
facebooktwitterlinkedinreddit

Did you know that there are currently around 4,294,967,296 IPv4 addresses in use?

That’s a big number.

Recommended article
February 6, 2025

Top Programming Languages in 2025

Lucilla Tomassi

Lucilla Tomassi

Languages and frameworks

So big, in fact, that a new standard is being introduced to cope with demand: IPv6.

In this article, we’re going to explore how to validate an IP address using Python. This can be useful for all sorts of scenarios, whether you’re working on fraud prevention or on more general projects like developing an iPaaS platform (you can find an iPaaS definition here).

But first, let’s look in more detail at the differences between the IPv4 and IPv6 IP address formats. When it comes to IP address validation, you may need to tweak your code to take account of these variations.

What’s the difference between IPv4 and IPv6?

Imagine, if you will, the very early days of the internet, before things like cloud phone systems were even a twinkle in a telecoms executive’s eye. The very first engineers working on IP (internet Protocol) invented IPv4, which – despite the “version 4” bit – was actually the first internet protocol introduced and is still in use today.

You will of course be very familiar with the format, which is four numbers between 0 and 255 separated by periods, like this: 38.251.131.135

Each number is an 8-bit field and represents a single byte of the IP address. That means that the complete IP is a 32-bit (4 x 8 bits) address space. Altogether, this allows for enough combinations to generate 4.3 billion unique addresses.

Now, back when those early engineers were coming up with this concept, they couldn’t have foreseen the scale of the modern internet or imagined that tens of millions of devices might want to access a single co.nz domain at once. Quite understandably, they assumed that 4.3 billion addresses would be more than enough.

Well, as we saw at the beginning of this article, we’ve already nearly reached that.

Fortunately, some smart people noticed this issue coming down the tracks years ago and set up the Internet Engineering Task Force (IETF). Back in 1998, this august body introduced IPv6, which instead uses 128-bit addressing. This means it can be used to support around 340 trillion trillion addresses. So hopefully, it will be a long time before we run out of IPv6 capacity. Tasks like VoIP migration should be easily achievable for many years to come.

IPv6 format is eight hexadecimal numbers separated by colons and looks like this: 

2510:cc:8000:1c82:543c:cd2e:f2fa:5a8b

In this article we’ll be focusing on validating IPv4 addresses, but the same principles we cover here are applicable to IPv6 addresses too.

Free to use image from Unsplash

Validating an IP address with Python

Python is an object-oriented and dynamically typed coding language well loved by amateur coders and senior developers alike. Because it’s so flexible and scalable, it can be used for all sorts of applications. From using Python for automation to developing websites and data visualisation tools, it’s a terrific option for accomplishing varied technical tasks. 

There are a number of ways of validating IP addresses in Python. Here we present two of the most straightforward methods: using the ipaddress() module and using your own custom regex. We’ll also have a look at setting up your own custom function.

Validating an IP address using the ipaddress() module

This is by far the simplest method and one of the most secure. The ipaddress() function won’t actually tell you that an IP address is valid as such, but it can perform basic arithmetic with it. With a bit of custom juggling, we can use this to return a result about its validity.

The first step is to import the ipaddress() module into your code. Then, call the .ip_address() method on the ipaddress class, and pass it an IP string. If it’s a valid IPv4 or IPv6 address, the ipaddress module will use the string to produce a new IP address object.

If, on the other hand, the string you pass it is not a valid IP address, the ipaddress() function will return a value error. As we already explained, the module tries to use the string you provide to create a Python IP address object. So in order to actually validate an IP, you have to create your own IP validation function. Here’s an example:

Note: this will also work with IPv6 addresses.

Validating an IP address with a custom regex

If you’re used to working with Python frameworks, you’ll appreciate its versatility as a coding language. So there are multiple approaches possible for any given coding task. Another way we can determine whether an IP address is valid or not is by using a regular expression (regex) to match the required pattern.

In this case, that means four numbers between 0 and 255 separated by dots. Because the values of the numbers are restricted to 0 ≤ n ≤ 255, you’ll have to add some more code of your own for additional verification.

(Also, since you’ll be defining the shape of the address, that means that you’ll need to write separate functions to check IPv4 and IPv6 addresses, since their shapes are very different.)

What you’re going to do is import the re library so you can use the .match() method to check whether your string matches the defined pattern.

After you’ve done this, the next step is to create your regex string. This defines the shape for matching. There are several ways of doing this, but here’s a straightforward example:

“[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}”

Let’s have a look at what’s going on there. This expression consists of:

[0-9] – you want numbers between 1 and 9

{1,3} – you want between 1 and 3 digits in each section

\. – tells the parser to look for the “.” symbol. This is important because in regex, “.” is a special character meaning “any character”, so if you want the parser to look for the character “.” itself, you have to include the backslash to tell it to do that.

Together, these components define one byte, so you require four of them to define the pattern of the IP address as a whole. (Although don’t forget not to put “\.” at the end – you only need to put them between each section.)

This is okay as far as it goes, but there’s more work to do. That’s because you haven’t yet specified that the value of each number has to be between 0 and 255. At the moment, a number like 495 would return a positive match. So you need to set up an additional check to verify this.

Putting it all together, you’ll end up with something like this:

validate an IP address with Python

Validating an IP address using a custom function

Just as there are billions of IP addresses being used all over the world, whether on a desktop, a hosted IP phone, or a laptop, sometimes it feels as if there are billions of ways of achieving the result you want with Python.

So let’s look at one method of validating IP addresses in a slightly more freestyle way.

Breaking down the task into its constituent parts, we can see that we’ll need to do the following:

  • Split up the IP address into four sections and store each section into a list of strings
  • Verify that the IP string comprises four numbers separated by periods 
  • For each number in the IP string, verify that the number is an integer n where 0 ≤ n ≤ 255

We can use the len() function to determine string length. What you end up with might look something like this:

validate an IP address with Python

A note on Python

There’s a reason why Python is often listed as one of the essential programming languages for professionals. It’s a general-purpose language and one of the easiest to learn. However, its flexibility makes it a very powerful tool for meeting all kinds of programming goals.

As well as being equipped with many and varied features, the fact it’s open-source and so widely used means that there are plenty of resources available to learn how to use it. There’s a sizeable global community of developers very happy to share their expertise.

So whatever you’re working on, from design applications to projects aimed at mitigating VoIP security risks, there will always be a friendly expert ready to talk you through best practice.

You’ll come across Python in any number of contexts. It’s perhaps most commonly used for building websites and for development testing. But you’ll also see it in data science, prototyping and the creation of recommendation algorithms. 

If you’re involved in writing software for self-driving cars or any number of projects managing VoIP for business clients, you may well also encounter Python in your day-to-day work. So it’s vital to get to grips with this increasingly important language.

Top Trending Python Frameworks Today

Final thoughts

Remember that there are many different possible methods for validating an IP address using Python. We’ve covered three of the most common ones here, but you may very well prefer another. 

That’s the beauty of coding, of course. Each developer has their own preferred style and way of achieving the same end goal. So feel free to experiment!

Related Posts

perché esplorare nuovi framework potrebbe far fallire il tuo progetto

Adopting New Frameworks Could Jeopardize Your Project

Matteo Baccan
September 2, 2024
gazelle logo, a new framework for flutter and dart.

Gazelle: A Flexible Framework for Building Custom and Scalable Backends in Dart

Codemotion
August 7, 2024
frameworks

Unpopular Opinion: Framed by the Framework

Arnaldo Morena
June 4, 2024
nuxt.js guide with code examples

In-Depth Guide to Nuxt.js with Code Examples

Codemotion
May 30, 2024
Share on:facebooktwitterlinkedinreddit

Tagged as:Backend Python

Grace Lau
GitHub Copilot: Voices for and Against
Previous Post
Metaverse: A Hitchhiker’s Guide to the Future of Immersive Experiences
Next Post

Footer

Discover

  • Events
  • Community
  • Partners
  • Become a partner
  • Hackathons

Magazine

  • Tech articles

Talent

  • Discover talent
  • Jobs

Companies

  • Discover companies

For Business

  • Codemotion for companies

About

  • About us
  • Become a contributor
  • Work with us
  • Contact us

Follow Us

© Copyright Codemotion srl Via Marsala, 29/H, 00185 Roma P.IVA 12392791005 | Privacy policy | Terms and conditions