Skip to content

Commit

Permalink
Supported IP2Location IPTools class.
Browse files Browse the repository at this point in the history
  • Loading branch information
ip2location committed Jul 4, 2022
1 parent cbfe93b commit 5bb1d8b
Show file tree
Hide file tree
Showing 5 changed files with 244 additions and 2 deletions.
44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,50 @@ Route::get('test', 'TestController@lookup');
```
7. Enter the URL <your domain>/public/test and run. You should see the information of **8.8.8.8** IP address.

### IPTools

1. Create a **TestController** in Laravel using the below command line
```
php artisan make:controller TestController
```
2. Open the **app/Http/Controllers/TestController.php** in any text editor.
3. To use IP2Location IPTools class, add the below lines into the controller file.
```php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use IP2LocationLaravel; //use IP2LocationLaravel class

class TestController extends Controller
{
//Create a lookup function for display
public function lookup(){

var_dump(IP2LocationLaravel::isIpv4('8.8.8.8'));echo '<br>';
var_dump(IP2LocationLaravel::isIpv6('2001:4860:4860::8888'));echo '<br>';
print_r(IP2LocationLaravel::ipv4ToDecimal('8.8.8.8'));echo '<br>';
print_r(IP2LocationLaravel::decimalToIpv4(134744072));echo '<br>';
print_r(IP2LocationLaravel::ipv6ToDecimal('2001:4860:4860::8888'));echo '<br>';
print_r(IP2LocationLaravel::decimalToIpv6('42541956123769884636017138956568135816'));echo '<br>';
print_r(IP2LocationLaravel::ipv4ToCidr('8.0.0.0', '8.255.255.255'));echo '<br>';
print_r(IP2LocationLaravel::cidrToIpv4('8.0.0.0/8'));echo '<br>';
print_r(IP2LocationLaravel::ipv6ToCidr('2002:0000:0000:1234:abcd:ffff:c0a8:0000', '2002:0000:0000:1234:ffff:ffff:ffff:ffff'));echo '<br>';
print_r(IP2LocationLaravel::cidrToIpv6('2002::1234:abcd:ffff:c0a8:101/64'));echo '<br>';
print_r(IP2LocationLaravel::compressIpv6('2002:0000:0000:1234:FFFF:FFFF:FFFF:FFFF'));echo '<br>';
print_r(IP2LocationLaravel::expandIpv6('2002::1234:FFFF:FFFF:FFFF:FFFF'));echo '<br>';
}
}

```
4. Add the following line into the *routes/web.php* file.
```
Route::get('test', 'TestController@lookup');
```
5. Enter the URL <your domain>/public/test and run. You should see the information of **8.8.8.8** IP address.

## DEPENDENCIES

This library requires either IP2Location BIN data file or IP2Location API key to function. You may download the BIN data file at
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"minimum-stability": "stable",
"require": {
"php": ">=5.4",
"ip2location/ip2location-php": "9.*"
"ip2location/ip2location-php": ">=9.4"
},
"autoload": {
"psr-4": {
Expand Down
2 changes: 1 addition & 1 deletion license.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2020 IP2Location.com
Copyright (c) 2022 IP2Location.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
72 changes: 72 additions & 0 deletions src/IP2LocationLaravel.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,76 @@ public function get($ip, $mode = 'bin')

return $records;
}

public function isIpv4($ip)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->isIpv4($ip);
}

public function isIpv6($ip)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->isIpv6($ip);
}

public function ipv4ToDecimal($ip)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->ipv4ToDecimal($ip);
}

public function ipv6ToDecimal($ip)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->ipv6ToDecimal($ip);
}

public function decimalToIpv4($num)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->decimalToIpv4($num);
}

public function decimalToIpv6($num)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->decimalToIpv6($num);
}

public function ipv4ToCidr($ipFrom, $ipTo)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->ipv4ToCidr($ipFrom, $ipTo);
}

public function cidrToIpv4($cidr)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->cidrToIpv4($cidr);
}

public function ipv6ToCidr($ipFrom, $ipTo)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->ipv6ToCidr($ipFrom, $ipTo);
}

public function cidrToIpv6($cidr)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->cidrToIpv6($cidr);
}

public function compressIpv6($ipv6)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->compressIpv6($ipv6);
}

public function expandIpv6($ipv6)
{
$ipTools = new \IP2Location\IpTools();
return $ipTools->expandIpv6($ipv6);
}
}
126 changes: 126 additions & 0 deletions tests/BasicTest.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
<?php

namespace Ip2location\IP2LocationLaravel;

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;
use IP2LocationLaravel;

class BasicTest extends TestCase
{
Expand All @@ -13,4 +17,126 @@ public function testGet()
$this->assertEquals($result['countryCode'], 'US');
}

public function testIpv4()
{
$this->assertTrue(IP2LocationLaravel::isIpv4('8.8.8.8'));
}

public function testInvalidIpv4()
{
$this->assertFalse(IP2LocationLaravel::isIpv4('8.8.8.555'));
}

public function testIpv6()
{
$this->assertTrue(IP2LocationLaravel::isIpv6('2001:4860:4860::8888'));
}

public function testInvalidIpv6()
{
$this->assertFalse(IP2LocationLaravel::isIpv6('2001:4860:4860::ZZZZ'));
}

public function testIpv4Decimal()
{
$this->assertEquals(
134744072,
IP2LocationLaravel::ipv4ToDecimal('8.8.8.8')
);
}

public function testDecimalIpv4()
{
$this->assertEquals(
'8.8.8.8',
IP2LocationLaravel::decimalToIpv4('134744072')
);
}

public function testIpv6Decimal()
{
$this->assertEquals(
'42541956123769884636017138956568135816',
IP2LocationLaravel::ipv6ToDecimal('2001:4860:4860::8888')
);
}

public function testDecimalIpv6()
{
$this->assertEquals(
'2001:4860:4860::8888',
IP2LocationLaravel::decimalToIpv6('42541956123769884636017138956568135816')
);
}

public function testIpv4ToCidr()
{
$this->assertEqualsCanonicalizing(
['8.0.0.0/8'],
IP2LocationLaravel::ipv4ToCidr('8.0.0.0', '8.255.255.255')
);
}

public function testCidrToIpv4()
{
$this->assertEqualsCanonicalizing(
[
'ip_start' => '8.0.0.0',
'ip_end' => '8.255.255.255',
],
IP2LocationLaravel::cidrToIpv4('8.0.0.0/8')
);
}

public function testIpv6ToCidr()
{
$this->assertEqualsCanonicalizing(
[
'2002::1234:abcd:ffff:c0a8:0/109',
'2002::1234:abcd:ffff:c0b0:0/108',
'2002::1234:abcd:ffff:c0c0:0/106',
'2002::1234:abcd:ffff:c100:0/104',
'2002::1234:abcd:ffff:c200:0/103',
'2002::1234:abcd:ffff:c400:0/102',
'2002::1234:abcd:ffff:c800:0/101',
'2002::1234:abcd:ffff:d000:0/100',
'2002::1234:abcd:ffff:e000:0/99',
'2002:0:0:1234:abce::/79',
'2002:0:0:1234:abd0::/76',
'2002:0:0:1234:abe0::/75',
'2002:0:0:1234:ac00::/70',
'2002:0:0:1234:b000::/68',
'2002:0:0:1234:c000::/66',
],
IP2LocationLaravel::ipv6ToCidr('2002:0000:0000:1234:abcd:ffff:c0a8:0000', '2002:0000:0000:1234:ffff:ffff:ffff:ffff')
);
}

public function testCidrToIpv6()
{
$this->assertEqualsCanonicalizing(
[
'ip_start' => '2002:0000:0000:1234:abcd:ffff:c0a8:0101',
'ip_end' => '2002:0000:0000:1234:ffff:ffff:ffff:ffff',
],
IP2LocationLaravel::cidrToIpv6('2002::1234:abcd:ffff:c0a8:101/64')
);
}

public function testCompressIpv6()
{
$this->assertEquals(
'2002::1234:ffff:ffff:ffff:ffff',
IP2LocationLaravel::compressIpv6('2002:0000:0000:1234:ffff:ffff:ffff:ffff')
);
}

public function testExpandIpv6()
{
$this->assertEquals(
'2002:0000:0000:1234:ffff:ffff:ffff:ffff',
IP2LocationLaravel::expandIpv6('2002::1234:ffff:ffff:ffff:ffff')
);
}

}

0 comments on commit 5bb1d8b

Please sign in to comment.