Dökümantasyon

ENUM DNS Sunucu(EDS)

Tanıtım

Taşınmış numara ve operatör prefixlerini DNS sorgusu ile sorgulanmasını sağlar. SIP Redirect Sunucu olarak da çalışabilir. Sippy Softswitch, FreeSWITCH, Asterisk gibi sunuculara entegre edilebilir. Yazlımlarınız içerisinden de kullanılabilir.

Taşımış Numara desteği ile numaranın taşınmış ise hangi operatörde olduğunu, Operatör Prefixleri desteği ile güncel olarak numaranın hangi operatöre ait olduğunu bildirir.

Sunucu tarafında tutulan veriler doğrudan sunucudan da sorgulanabileceği gibi, istemci kurularak da sorgulanabilir. İstemci tüm veriyi kendi içinde cachelediğinden, hem erişimde araya internet girmeyeceğinden hız artar, hem de bağlantı sorunlarında da sisteminiz işlemeye devam eder.

Gerçersiz, tanımlanmamış numaralar için özel prefix döner, bu sayede bu tür çağrıları anında dururarak sisteminizde gereksiz şekilde alternatif operatör bağlantılarını kullanmanızı önler.

Prefix gruplamaları ile sistemlerinizde daha az prefix girilerek routing ve faturalama billing işlemlerinizin süresini kısaltmanıza yardımcı olur. Bu aynı zamanda fiyat listelerinizi kısaltacağından, yönetim işlerinizi de hafifletir.

Sunucu Ayarları

  1. Cisco ayarları için lütfen buraya tıklayınız.
  2. Örnek Asterisk ayarları için lütfen buraya tıklayınız. En basit olarak extensions.conf dosyasına şunu ekleyiniz:
                                exten => _X.,1,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip,1,,FIRMA.enum.eurotel.com.tr)})
    exten => _X.,n(dial),Dial(SIP/${Sipuri},60,r)
    exten => _X.,n(lookupfailed),Hangup()
    
  3. FreeSWITCH ayarları için lütfen buraya tıklayınız.
  4. Sippy Softswitch hem SIP Redirect Sunucu hem de External Routing üzerinden EDS'ye erişebilir.

DIG Komutu Örneği


export
TELEFON="2.2.2.2.2.2.2.6.1.2.0.9" # Telefon no ters sirali ve her sayi nokta ile ayrilmis

dig @[EUROTEL_DNS_IP] ${TELEFON}.enum.[FIRMA_ADI].eurotel.com.tr NAPTR +short

PHP Kod Örneği

Eğer DNS tanımı yoksa ve IP ile TLD kullanılacaksa "origin" değişkeni şu şekilde kullanmalısınız: Örneğin TLD IP '1.2.3.4' ise: '@1.2.3.4'

<?php
    require_once 'Net/DNS.php';

    function eurotel_ported($phone, $origin, $name_server){
        $result = null;
        $resolver = new Net_DNS_Resolver();
        $resolver->nameservers = array($name_server);
        $rev_phone = implode('.',str_split(strrev($phone)));
        $response = $resolver->query("$rev_phone.$origin", 'NAPTR', 'IN');
        if ($response) {
                foreach ($response->answer as $rr) {
                        if ($rr->flags == 'u')
                                $r_arr = explode('!',$rr->regex);
                                $r_from = $r_arr[1];
                                $r_to = $r_arr[2];
                                $r_str = preg_replace('/'.$r_from.'/i', $r_to, $phone);
                                $r_str = preg_replace('/^sip:/', '', $r_str);
                                $r_arr = explode('@',$r_str);
                                $result= $r_arr[0];
                                break;
                }
        }
        return $result;
     }

     echo eurotel_ported("[TELEFON]", "enum.[FIRMA_ADI].eurotel.com.tr", "[EUROTEL_DNS_IP]");
?>

Python Kod Örneği

Eğer DNS tanımı yoksa ve IP ile TLD kullanılacaksa "from_origin" değişkeni şu şekilde kullanmalısınız: Örneğin TLD IP '1.2.3.4' ise: '@1.2.3.4'

import socket
import re
from dns import name, resolver, e164

def eurotel_ported(phone, from_origin, name_server):
    origin = name.from_text(from_origin)
    server = resolver.Resolver(name_server)
    server.nameservers = [socket.gethostbyname(name_server)]
    answers = server.query(e164.from_e164(phone, origin), 'NAPTR')
    for rdata in answers:
        if rdata.flags == 'u':  # Terminal
            regex = rdata.regexp.split('!')
            return re.sub(regex[1], regex[2], phone).lstrip('sip:').split('@')[0]
    return None

if __name__ == "__main__":
    print eurotel_ported("[TELEFON]", "enum.[FIRMA_ADI].eurotel.com.tr", "[EUROTEL_DNS_IP]")

.NET Kod Örneği

Eğer DNS tanımı yoksa ve IP ile TLD kullanılacaksa "from_origin" değişkeni şu şekilde kullanmalısınız: Örneğin TLD IP '1.2.3.4' ise: '@1.2.3.4'

/// Download library: https://www.eurotel.com.tr/assets/downloads/enum_dns_lib.zip

public void eurotel_ported(string phone, string from_origin, string name_server)
{
    string phone_rev;
    StringBuilder sb = new StringBuilder();
    string phone_rev = System.Text.RegularExpressions.Regex.Replace(phone, "[^0-9]", "");
    sb.Append(from_origin);
    foreach (char c in phone_rev){
        sb.Insert(0, string.Format("{0}.", c));
    }
    string strEnum = sb.ToString();

    Resolver resolver1 = new Resolver();
    resolver1.DnsServer = name_server;

    Response response = resolver1.Query(strEnum, QType.NAPTR, QClass.IN);
    foreach (RR rr in response.Answers)
        Console.WriteLine(rr.ToString());
}

Detaylı bilgi mi istiyorsunuz?

Bize lütfen destek hattımızdan ulaşın