Get Started With IP2Location Kotlin Module

Dependencies

This library requires IP2Location BIN database to function. You may download the BIN database at


Requirements

Intellij IDEA: https://www.jetbrains.com/idea/


Sample Codes

Query geolocation information from BIN database

You can query the geolocation information from the IP2Location BIN database as below:

import kotlin.jvm.JvmStatic
import java.lang.Exception
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths

object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        try {
            val strIPAddress = "8.8.8.8"

            // querying with the BIN file
            val dbPath = "/usr/data/IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE-ISP-DOMAIN-NETSPEED-AREACODE-WEATHER-MOBILE-ELEVATION-USAGETYPE-ADDRESSTYPE-CATEGORY-DISTRICT-ASN.BIN"

            var loc = IP2Location()

            // this is to initialize with a BIN file
            val useMMF = true
            loc.open(dbPath, useMMF)

            // this is to initialize with byte array
            // val binPath: Path = Paths.get(dbPath)
            // val binFileBytes = Files.readAllBytes(binPath)
            // loc.open(binFileBytes)

            var rec = loc.ipQuery(strIPAddress)

            when (rec.status) {
                "OK" -> println(rec)
                "EMPTY_IP_ADDRESS" -> println("IP address cannot be blank.")
                "INVALID_IP_ADDRESS" -> println("Invalid IP address.")
                "MISSING_FILE" -> println("Invalid database path.")
                "IPV6_NOT_SUPPORTED" -> println("This BIN does not contain IPv6 data.")
                else -> println("Unknown error." + rec.status)
            }
            loc.close()

        } catch (e: Exception) {
            println(e)
            e.printStackTrace(System.out)
        }
    }
}

							
						

Processing IP address using IP Tools class

You can manupulate IP address, IP number and CIDR as below:

object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        try {
            val tools = IPTools()

            println(tools.isIPV4("60.54.166.38"))
            println(tools.isIPV6("2600:1f18:45b0:5b00:f5d8:4183:7710:ceec"))
            println(tools.ipV4ToDecimal("60.54.166.38"))
            println(tools.ipV6ToDecimal("2600:118:450:5b00:f5d8:4183:7710:ceec"))
            println(tools.decimalToIPV4(BigInteger("1010214438")))
            println(tools.decimalToIPV4(BigInteger("770")))
            println(tools.decimalToIPV6(BigInteger("50510686025047391022278667396705210092")))
            println(tools.decimalToIPV6(BigInteger("977677717377287979008")))
            println(tools.ipV4ToDecimal("0.0.166.38"))

            println(tools.compressIPV6("0000:0000:0000:0035:0000:FFFF:0000:0000"))
            println(tools.compressIPV6("::0035:0000:FFFF:0000:0000"))
            println(tools.compressIPV6("0120:F000:0000:0035:0000:FFFF:0000:0000"))
            println(tools.compressIPV6("0120:F000:0002:0035:0090:FFFF:0000:0000"))
            println(tools.compressIPV6("::"))
            println(tools.compressIPV6("233::"))
            println(tools.compressIPV6("::233:0:0"))
            println(tools.compressIPV6("00FF:0E00:2000:0035:0009:FFFF:10:0000"))
            println(tools.expandIPV6(tools.compressIPV6("0500:6001:00FE:35:0000:FFFF:0000:0000")))
            val stuff = tools.ipV4ToCIDR("10.0.0.0", "10.10.2.255")
            stuff?.forEach(System.out::println)

            val stuff2 =
                tools.ipV6ToCIDR("2001:4860:4860:0000:0000:0000:0000:8888", "2001:4860:4860:0000:eeee:ffff:ffff:ffff")
            stuff2?.forEach(System.out::println)

            val stuff3 = tools.cIDRToIPV4("10.123.80.0/12")
            stuff3?.forEach(System.out::println)
            val stuff4 = tools.cIDRToIPV6("2002:1234::abcd:ffff:c0a8:101/62")
            stuff4?.forEach(System.out::println)
        } catch (e: Exception) {
            println(e)
            //e.printStackTrace(System.out)
            throw e
        }
    }
}

							
						

List down country information

You can query country information for a country from IP2Location Country Information CSV file as below:

object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        try {
            val cc = Country("./IP2LOCATION-COUNTRY-INFORMATION.CSV")

            val ccResult: Map<String, String?>? = cc.getCountryInfo("US")
            println(ccResult.toString())

            val ccResults: List<Map<String, String?>> = cc.getCountryInfo()
            println(ccResults.toString())
        } catch (e: Exception) {
            println(e)
            //e.printStackTrace(System.out)
            throw e
        }
    }
}

							
						

List down region information

You can get the region code by country code and region name from IP2Location ISO 3166-2 Subdivision Code CSV file as below:

object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        try {
            val reg = Region("./IP2LOCATION-ISO3166-2.CSV")

            val regionCode: String? = reg.getRegionCode("US", "California")

            println(regionCode)
        } catch (e: Exception) {
            println(e)
            //e.printStackTrace(System.out)
            throw e
        }
    }
}

							
						

IP2Location Sample Database (BIN)

The sample BIN files have a limited scope and are only valid for the following IP ranges:

  1. IPv4 : 0.0.0.0 - 7.255.255.255
  2. IPv6 : 2a04:0000:0000:0000:0000:0000:0000:0000 - 2a04:ffff:ffff:ffff:ffff:ffff:ffff:fff