Перейти к содержимому
Калькуляторы

Выкладываю диалплан и скрипт проверки принадлежности номера сотовому оператору по данным сайтов.

 

Моё ТЗ выглядело примерно так:

1) Сайты для проверки

2) Номер астериском передается без 8-ки и +7 (в формате 9ХХХХХХХХХ)

3) Номер передается в правильном федеральном формате, число цифр строго 10, скрипт не проверяет правильность формата номера (это делает астериск)

4) Если один из сайтов не доступен или результат вывода не то что надо, то отправляем смс на мой номер.

5) Если результат вывода разный по сайтам то тоже отправляем смс с указанием в нем номера

6) Если оба сайта доступны и результат их работы корректный то:

6.1) Если, по обеим сайтам, region_id равен (76 - это мой домашний регион) И operator_id равен (1 или 2 или 99) то устанавливаем переменные:

ch_mejgorod=0 # признак междугороднего канала 0- не межгород (через симки), 1 -межгород (платный вызов)

operator_id=1 # ID оператора сотовой связи (1-МТС, 2-Мегафон, 99-Билайн)

region_id=76 # Регион регистрации (принадлежности) сотового номера (Внимание! Регионы сотовых операторов зачастую не совпадают с номерами автомобильных кодов регионов)

6.2) В остальных случаях, если region_id не равен 76 ИЛИ operator_id не равен (1 или 2 или 99):

ch_mejgorod=1 #признак междугороднего канала

operator_id=04

region_id=33

 

Скрипт:

#!/usr/bin/python
# -*- coding: utf-8 -*-

__author__ = 'Andrey Smirnov'
__email__ = 'mail@ansmirnov.ru'

import requests
import datetime
import json
import sys

from requests.auth import HTTPBasicAuth


def check1(phone):
   try:
       res = requests.get('http://mnp.tele2.ru/gateway.php?%s' % phone).json()
       return (int(res['response']['geocode']['code']), int(res['response']['mnc']['code']))
   except:
       return None


def check2(phone):
   try:
       res = requests.get('http://moscow.shop.megafon.ru/get_ajax_page.php?action=getMsisdnInfo&msisdn=7%s' % phone).json()
       return (int(res['region_id']), int(res['operator_id']))
   except:
       return None


def write_log(logname, msg):
   f = open(logname, 'a')
   f.write(msg)
   f.close()


def send_sms(msg, number='89202223344'):
   auth = HTTPBasicAuth('admin', 'adminpass')
   data = {
       'smscontent': msg,
       'telnum': number,
       'action': 'SMS',
       'line': '7',
       'smskey': '0000000e',
       'send': 'Send'
   }
   requests.post('http://192.168.1.1/default/en_US/sms_info.html', auth=auth, data=data)


def run(ph):
   c1, c2 = check1(ph), check2(ph)
   log1, log2, log3 = '/home/check_oper_id/sot_unlim.log', '/home/check_oper_id/mejgorod.log', '/home/check_oper_id/err.log',
   Currtime=datetime.datetime.now().strftime('%d %b %Y %H:%M:%S')

   if c1 != c2:
       msg = "Разный результат проверки. "+str(Currtime)+"  Номер: "+sys.argv[1]+"\n"
       send_sms(msg)
       write_log(log3, msg)
       return

   if c1 is None:
       msg = "Сайты недоступны. "+str(Currtime)+"  Номер: "+sys.argv[1]+"\n"
       send_sms(msg)
       write_log(log3, msg)
       return

   reg, op = c1

   if reg == 76 and int(op) in (1, 2, 99):
       print ('SET VARIABLE ch_mejgorod 0')
       print ('SET VARIABLE region_id %d' % reg)
       print ('SET VARIABLE operator_id %d' % op)
       strLog=str(Currtime)+" "+sys.argv[1]+" 0 "+str(c1)+"\n"
       write_log(log1, strLog)
       return

   print ('SET VARIABLE ch_mejgorod 1')
   print ('SET VARIABLE region_id %d' % reg)
   print ('SET VARIABLE operator_id %d' % op)
   strLog=str(Currtime)+" "+sys.argv[1]+" 1 "+str(c1)+"\n"
   write_log(log2, strLog)

run(sys.argv[1])

 

Диалплан:

exten => _89XXXXXXXXX,1,Set(ch_mejgorod=1)                                       ; inicializiruem ch_mejgorod=1
exten => _89XXXXXXXXX,n,AGI(/home/check_oper_id/check_oper_id.py,${EXTEN:1},)    ; peredaem ckriptu sot. nomer telefona
exten => _89XXXXXXXXX,n,NoOP(${ch_mejgorod})
exten => _89XXXXXXXXX,n,NoOP(${operator_id})
exten => _89XXXXXXXXX,n,NoOP(${region_id})
exten => _89XXXXXXXXX,n,GotoIf($["${ch_mejgorod}" = "1"]?mejgorod:)              ; esli mejgorod=1 to prigaem na mejgorod, ina4e idem vniz
exten => _89XXXXXXXXX,n,Goto(sotoper${operator_id})                              ; prigaem na metku sot. operatora (sotoper1, sotoper2,sotoper99)
exten => _89XXXXXXXXX,n(sotoper1),Set(TimeN=${STRFTIME(%b_%d_%H_%M)})            ; zvonok 4erez SIM-ki MTS
тут звоним через МТС
exten => _89XXXXXXXXX,n,Hangup()
exten => _89XXXXXXXXX,n(sotoper2),Set(TimeN=${STRFTIME(%b_%d_%H_%M)})            ; zvonok 4erez SIM-ki Megafon
тут звоним через Мегафон)
exten => _89XXXXXXXXX,n,Hangup()
exten => _89XXXXXXXXX,n(sotoper99),Set(TimeN=${STRFTIME(%b_%d_%H_%M)})             ; zvonok 4erez SIM-ki Beeline
тут звоним через Билайн
exten => _89XXXXXXXXX,n,Hangup()
exten => _89XXXXXXXXX,n(mejgorod),Playback(/usr/share/asterisk/sounds/mejgor)      ; proigrivaem 4to nomer platniy
тут звоним через междугороднего провайдера
exten => _89XXXXXXXXX,n,Hangup()

 

 

P/S/ Отдельное большущее спасибо разработчикам скрипта

Найденные ошибки и критика приветствуется.

Изменено пользователем goba

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос в том, как быстро Теле2 и Мегафон забанят по IP, а потом и капчу введут ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IvanShishkin

 

Уважаемый , как в воду глядели.

http://moscow.shop.megafon.ru/get_ajax_page.php?action=getMsisdnInfo&msisdn=79202224523

 

перестал работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NortH21 Да нет. Вчера в обед мне стали смс-ки кучей сыпаться , что разный результат проверки по сайтам.

 

Я проверил, сайт мегафона через tcping пинговался с потерями большими. Их досили походу, видать на дос они среагировали ну и попутно всю лишнюю нагрузку на сайт забанили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смысл базы ЦНИИС в том виде, в котором она у них ведется, скоро пропадет, ибо опять Россия...

Каждые 2 часа формируется новый файл с новыми перенесенными номерами. И каждые 2 часа он аккумулируется к одному большому файлу. Беда в том, что в большом файле фиксируются и те номера, которые вернулись к родительскому оператору.

У меня сейчас в таблице диапазонов 4 с небольшим тысячи записей DEF-диапазонов (по сути, выписка россвязи). В файле ЦНИИС более 2 миллионов записей. Нафига, спрашивается, хранить там вернувшиеся домой номера???

Мне кажется это нужно для того, чтобы определить какому оператору в день "Х" приналдежал номер "У", абонента "Й". Для органов то есть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я согласен, что для истории нужно. Но в этом огромном файле нет информации о дате перехода. Для этого нужно искать в инкрементных файлах интересующий номер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

C апреля на rosreestr.subnets.ru стала доступна информация по перенесенным номерам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

virus_net спасибо.

 

Кто использует rosreestr.subnets.ru подскажите, если номер менял оператора один раз, то добавляется поле 'moved2operator'.

А если номер менял оператора несколько раз, то будут поля 'moved3operator' 'moved42operator' и т.д. Или текущий, последний смененный оператор, всегда идет в поле 'moved2operator'?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

дык напишите virus_net - это их разработка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Коллеги, приветствую!

 

Также нуждаюсь в базе. Но - в локальной реализации, ибо интернет очень дохлый и нестабильный.

Готов создать такую реализацию для Астериска (freepbx) и сделать свободной, общедоступной.

 

1) Попытки обновления базы раз в сутки, при неудаче - откладывается на 10 минут. Скачивание файла, хостинг готов предоставить

2) Локальное API для определения реального оператора и региона по номеру

3) Диаплан и AGI (внедряется в штатный FreePBX легко) для добавления префикса к номер (1*, 2*..) для дальнейшего выбора транка в Outbound Routes.

 

Все это я сделаю - нужен доступ к базе. Будем полезны друг другу?

 

скайп whoim2, почта whoim@mail.ru

 

У меня сейчас в таблице диапазонов 4 с небольшим тысячи записей DEF-диапазонов (по сути, выписка россвязи). В файле ЦНИИС более 2 миллионов записей. Нафига, спрашивается, хранить там вернувшиеся домой номера???

Скоро этот файл будет содержать всю выписку с тупым перечислением ВСЕХ DEF-номеров.

 

Спасибо, интересная инфа. Думаю, я смогу сделать обработку так, чтобы в субд (используемой api) оставлять только перенесенные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Также интересует база перенесённых номеров, непровайдеру реально получить доступ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За 2 года никто нигде базу не выкладывает что ли?
Тоже нужна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 24.02.2019 в 18:34, SOFTOLAB сказал:

За 2 года никто нигде базу не выкладывает что ли?
Тоже нужна.

Это же живая база, там объекты меняются каждый день. Какой смысл в прошлогодней базе, даже и утекшей в паблик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

14 hours ago, MATPOC said:

Это же живая база, там объекты меняются каждый день. Какой смысл в прошлогодней базе, даже и утекшей в паблик.

Да это понятно, просто за два года никаких подвижек...
Был бы источник постоянный, я бы запилил API для нуждающихся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 часов назад, SOFTOLAB сказал:

просто за два года никаких подвижек...

Их и не будет. Пока не примут правила и не обяжут оператора базы данных обеспечить доступ, его не будет в таком виде.

 

Цитата

 

Постановление Правительства РФ от 6 августа 2013 г. N 672 "О мерах по обеспечению финансирования создания и функционирования базы данных перенесенных абонентских номеров"

- Обладателем информации, содержащейся в базе данных, является Российская Федерация.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

7 hours ago, Связной (С) said:

Их и не будет. Пока не примут правила и не обяжут оператора базы данных обеспечить доступ, его не будет в таком виде.

Да я вкурсе, просто так же как с реестром заблокированных адресов будет и всё, был бы источник кто будет давать саму базу раз в сутки.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

17 апреля 2023 г. пропал доступ к БДПН prod-sftp.numlex.ru .

Кто знает откуда сейчас забирать БДПН?

Изменено пользователем babay951

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени.

 

Можно кто-то поделится ссылкой хоть не на "свежую" базу? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё, niir заблокировал доступ всем операторам связи, кроме подвижной радиотелефонной связи.

Есть идеи как дальше работать? Где брать базу и апдейты? Платить по 10 копеек за запрос я им не собираюсь, к тому же это будет тормозить работу и надежность упадет.

Изменено пользователем babay951

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, перестало отдавать по SFTP со вторника, 16.01.2024. При этом в .xls формате всё ещё можно скачать с https://www.niir.ru/bdpn/tablica-marshrutnyh-nomerov/

Может остался у кого относительно свежий архив с .csv файлом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Forced Простите, но если есть эксель, то кто мешает сохранить в csv?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.