Author Topic: IP городской или внешний  (Read 5339 times)

0 Members and 1 Guest are viewing this topic.

Offline Женя

  • Newbie
  • *
  • Posts: 10
  • Karma: +0/-0
IP городской или внешний
« on: July 15, 2006, 12:53:57 »
Подскажите как вычислить к какой сети принадлежит IP имея список томских сетей

Offline Safir

  • Sr. Member
  • ****
  • Posts: 402
  • Karma: +0/-0
    • http://
IP городской или внешний
« Reply #1 on: July 15, 2006, 13:09:58 »
Quote from: Женя
Подскажите как вычислить к какой сети принадлежит IP имея список томских сетей
http://tomsknet.ru/nets

Только при чём тут программирование?


Offline Женя

  • Newbie
  • *
  • Posts: 10
  • Karma: +0/-0
IP городской или внешний
« Reply #2 on: July 15, 2006, 13:33:31 »
Quote from: Safir
http://tomsknet.ru/nets

Только при чём тут программирование?
При том что вычислить нужно программно используя список томских сетей вот я и спрашиваю как рассчитать

Offline John_84

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • http://
IP городской или внешний
« Reply #3 on: July 15, 2006, 20:58:10 »
Quote from: Женя
При том что вычислить нужно программно используя список томских сетей вот я и спрашиваю как рассчитать

Короче, берешь адрес сети в двоичном виде, искомый айпишник, складываешь покомпонентно по модулю 2 (в Pascal 'XOR', в C '^'), получаешь 4-байтный вектор, его умножаешь на маску сети (тоже 4 байта) покомпонентно (в Pascal 'AND', в C '&'). Если получил 0, то айпишик из этой сети. И так проверяешь для всех сетей   .

Табличка адресов и масок сетей есть на http://tomsknet.ru/nets.

Удачи=)

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
IP городской или внешний
« Reply #4 on: July 16, 2006, 12:37:31 »
Quote from: Женя
При том что вычислить нужно программно используя список томских сетей вот я и спрашиваю как рассчитать
я делаю вот так

Code: [Select]
CREATE PROCEDURE IsTskIP
  @IP varchar(15)
AS
if exists(select * from tsknets where @IP between StartIP and EndIP)
  select 1 as TskIP
else
  select 0 as TskIP
GO

Offline Женя

  • Newbie
  • *
  • Posts: 10
  • Karma: +0/-0
IP городской или внешний
« Reply #5 on: July 19, 2006, 15:40:59 »
Quote from: visual
я делаю вот так

Code: [Select]
CREATE PROCEDURE IsTskIP
  @IP varchar(15)
AS
if exists(select * from tsknets where @IP between StartIP and EndIP)
  select 1 as TskIP
else
  select 0 as TskIP
GO
Это уже понятно а как получить startIP и endIP алгоритм нужен

Offline visual

  • Hero Member
  • *****
  • Posts: 714
  • Karma: +0/-0
    • http://
IP городской или внешний
« Reply #6 on: July 19, 2006, 18:20:00 »
Quote from: Женя
Это уже понятно а как получить startIP и endIP алгоритм нужен
смотря из какого формата ты собираешься извлекать инфомацию. если брать в простом виде:
Quote
80.89.128.176   80.89.128.183
80.89.133.16    80.89.133.31
...
то тут с алгоритмом все совершенно прозрачно. а в таком виде можно запросить и на ЦИС, и в Томлайн-е. например,
wget "http://www.tomline.ru/clients/tomskNets-txt.html?o=a&ml=2&nc=1" -O tsk.txt
если будешь по маске сети из BGP таблицы на http://noc.tomsk.ru/bgp.txt выдирать, то там чуток сложнее. где-то в одной из тем я выкладывал тулзу (Nets2Route) для изменения локальной таблицы маршрутизации на винде по BGP таблице в том числе.

Offline Женя

  • Newbie
  • *
  • Posts: 10
  • Karma: +0/-0
IP городской или внешний
« Reply #7 on: July 20, 2006, 13:23:19 »
Quote from: visual
смотря из какого формата ты собираешься извлекать инфомацию. если брать в простом виде:
то тут с алгоритмом все совершенно прозрачно. а в таком виде можно запросить и на ЦИС, и в Томлайн-е. например,
wget "http://www.tomline.ru/clients/tomskNets-txt.html?o=a&ml=2&nc=1" -O tsk.txt
если будешь по маске сети из BGP таблицы на http://noc.tomsk.ru/bgp.txt выдирать, то там чуток сложнее. где-то в одной из тем я выкладывал тулзу (Nets2Route) для изменения локальной таблицы маршрутизации на винде по BGP таблице в том числе.
Да вот получилось вроде. Снач адресом все понятно : network&mask, ну и сконечным, у меня проблема была с битовоми операциями над большими числами (если сразу переводить адрес в числовой формат) asp не понимайт. Пришлось по октетам считать, потом переводить.

Ну вот так я решил сделать, кажется правильно 62.68.128.0/255.255.248.0
strat =  255&62  255&68 ... потом в числовой формат x*256^3 ....
end  =  256 + (62 |~255) ..

Все работает, можно и в готовом виде конечно взять, а если не будет.