PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

IP से देश का निर्धारण करें - IPv6

मुझे विश्वास है कि मुझे समाधान मिल गया है। इसमें पहले डेटा को संशोधित करना और फिर इनपुट की कुछ मालिश करना शामिल है। यहाँ क्या काम किया।

सबसे पहले, डेटा को परिवर्तित करने की आवश्यकता है ताकि सभी पते पूर्ण हो जाएं, बिना छोटा किए, अर्धविराम विभाजक हटा दिए जाएं। मेरे प्रश्न में दिखाया गया नमूना डेटा इसमें परिवर्तित हो गया है:

 t_start                          | t_end                            | t_country_code
----------------------------------+----------------------------------+----------------
 00000000000000000000000000000000 | 00ffffffffffffffffffffffffffffff | ZZ
 01000000000000000000000000000000 | 01ffffffffffffffffffffffffffffff | ZZ
...
 20000000000000000000000000000000 | 2000ffffffffffffffffffffffffffff | ZZ
...
 20011200000000000000000000000000 | 20011200ffffffffffffffffffffffff | MX
...

यह वही है जो डेटाबेस में संग्रहीत है।

अगला कदम कोड में प्राप्त आईपी पते को उसी प्रारूप में परिवर्तित करना था। यह PHP में निम्न कोड के साथ किया जाता है (मान लें कि $ip_adress आने वाला IPv6 पता है):

$addr_bin = inet_pton($ip_address);                                                                                                              
$bytes = unpack('n*', $addr_bin);
$ip_address = implode('', array_map(function ($b) {return sprintf("%04x", $b); }, $bytes));

अब परिवर्तनीय $ip_adress उदाहरण के लिए, पूरा IPv6 पता होगा

:: => 00000000000000000000000000000000
2001:1200::ab => 200112000000000000000000000000ab

और इसी तरह।

अब आप इस पूरे पते की तुलना डेटाबेस की श्रेणियों से कर सकते हैं। मैंने IPv6 पतों से निपटने के लिए डेटाबेस में दूसरा फ़ंक्शन जोड़ा, जो इस तरह दिखता है:

CREATE OR REPLACE FUNCTION get_country_for_ipv6(character varying)
  RETURNS character varying AS
$BODY$
declare
    ip  ALIAS for $1;
    ccode   varchar;
begin
    select into ccode t_country_code from ipv6_to_country where addr between n_from and n_to limit 1;
    if ccode is null then
        ccode := '';
    end if;
    return ccode;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

अंत में, मेरे PHP कोड में मैंने वह कोड जोड़ा जो इनपुट ip_address के आधार पर एक या दूसरे पोस्टग्रेज फ़ंक्शन को कॉल करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हरोकू पीजी:पुल पासवर्ड प्रमाणीकरण विफल

  2. जोड़ीदार सरणी योग कुल कार्य?

  3. Cygnus-NGSI PostgreSQL में डेटा नहीं बचाएगा

  4. SQLalchemy भूमिका निर्धारित करते समय परिवर्तन नहीं कर रहा है

  5. चुनें कि एक श्रेणी में पहला अक्षर कहाँ है ( PostgreSQL )