Tomsk Sysadmins Forum

Windows => Программирование => Topic started by: Женя on July 15, 2006, 12:53:57

Title: IP городской или внешний
Post by: Женя on July 15, 2006, 12:53:57
Подскажите как вычислить к какой сети принадлежит IP имея список томских сетей
Title: IP городской или внешний
Post by: Safir on July 15, 2006, 13:09:58
Quote from: Женя
Подскажите как вычислить к какой сети принадлежит IP имея список томских сетей
http://tomsknet.ru/nets (http://tomsknet.ru/nets)

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

Title: IP городской или внешний
Post by: Женя on July 15, 2006, 13:33:31
Quote from: Safir
http://tomsknet.ru/nets (http://tomsknet.ru/nets)

Только при чём тут программирование?
При том что вычислить нужно программно используя список томских сетей вот я и спрашиваю как рассчитать
Title: IP городской или внешний
Post by: John_84 on July 15, 2006, 20:58:10
Quote from: Женя
При том что вычислить нужно программно используя список томских сетей вот я и спрашиваю как рассчитать

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

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

Удачи=)
Title: IP городской или внешний
Post by: visual 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
Title: IP городской или внешний
Post by: Женя 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 алгоритм нужен
Title: IP городской или внешний
Post by: visual 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 (http://noc.tomsk.ru/bgp.txt) выдирать, то там чуток сложнее. где-то в одной из тем я выкладывал тулзу (Nets2Route) для изменения локальной таблицы маршрутизации на винде по BGP таблице в том числе.
Title: IP городской или внешний
Post by: Женя 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 (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) ..

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