Конференция "Сети" » Корректное определение IP адреса сетевой карты [D7, WinXP]
 
  • Сергей М. © (18.01.12 12:51) [20]

    > laguna ©   (18.01.12 12:11) [19]


    Давай на огурцах - приведенная тобой ф-ция GetLocalIP где и в какой момент вызывается ? Это, видимо, фрагмент той самой "головной программы" ?
  • laguna © (18.01.12 13:38) [21]
    Нет, эта функция стоит на клиентских(на районах) машинах и определяет IP машины, с которой будет отослан отчет в "центр" Алексу :)
  • Сергей М. © (18.01.12 13:45) [22]

    > laguna ©   (18.01.12 13:38) [21]


    Во-от)..

    Наконец подходим к развязке драмы: каким образом, т.е. с использованием какого конкретно штатного (либо тобой самописного) сервиса отчет доставляется "в центр" Алексу" ?
  • laguna © (18.01.12 14:49) [23]

    > Сергей М. ©   (18.01.12 13:45) [22]

    по обычной почте (электронной) в виде текстового файла, определенной структуры.
  • Сергей М. © (18.01.12 15:00) [24]

    > по обычной почте (электронной)


    Во-от)..

    А теперь главный вопрос - за каким тебе понадобилось искать локальный адрес явно, если smtp-сервер (наверняка у вас он в той же подсети) сам определит этот адрес (или имя хоста) и запишет в поле заголовка "Received" доставляемого письма ?

    На принимающей письмо стороне остается только прочитать это поле..
  • laguna © (18.01.12 15:33) [25]
    Прочитать письмо - да , можно, глазами, выбрав его сначала из папки входящих, только этого мало. Нужно полученную информацию разнести по полочкам, соответствующим каждому району. И делает это "головная программа". Только это один из сервисов, работающих с районами. Некоторые модули отправляют данные напрямую в базу на головном сервере(одна сетка), проставляя соответствующие коды в соответствующие району поля. ДА и много чего еще. Всего объяснять нет смысла, т.к. каждый продумывает интервейс обмена данных по своему, применительно к местным условиям. Мне то нужно всего лишь праввильно извлеч IP адрес локальной машины(районной). Это я уже вернулся с чего начинался вопрос.
  • Сергей М. © (18.01.12 15:38) [26]

    > Мне то нужно всего лишь праввильно извлеч IP адрес локальной
    > машины


    Зачем ?!)
    Чтобы влупить его в текст отправляемого почтой документа что ли ?
  • Сергей М. © (18.01.12 15:40) [27]
    лично ты какое отношение имеешь к "головной программе" ?
    ты ее разработчик или каким либо образом причастен к ее разработке ?
  • laguna © (18.01.12 16:03) [28]

    > Зачем ?!)Чтобы влупить его в текст отправляемого почтой
    > документа что ли ?

    Чтобы данные положить туда куда надо, без дополнительного вмешательства операторов.

    > лично ты какое отношение имеешь к "головной программе" ?
    > ты ее разработчик или каким либо образом причастен к ее
    > разработке ?

    Да, разработчик. Да все работает как надо, просто говорю, что сегодня, точнее вчера с подключением камеры возник такой казус. Если бы не заметил, то и дальше работало бы.
  • laguna © (18.01.12 16:14) [29]
    Добавлю еще. Еще есть сирвис, в котором программа(районная) зная какой это район, отсылает письмо по конкретному адресу, т.к. определенный оператор обслуживает тот или иной район и  у каждого есть свой личный п/я
  • Сергей М. © (18.01.12 17:04) [30]
    > положить туда куда надо

    smtp-клиент  и без тебя и без вмешательства оператора определит этот адрес и положит туда куда следует - в параметр команды HELO/EHLO.

    Тебе как разработчику "головной программы" остается получив письмо заглянуть в самое последнее поле "Received" его заголовка, взять оттуда адрес или имя хоста отправителя.

    И зачем нужны все эти выкрутасы с "куда надо" при доставке именно почтой - по-прежнему совершенно не понятно. По сути ты попросту дублируешь инф-цию о сетевом адресе отправителя в случае именно почтовой доставки корреспонденции.
  • laguna © (18.01.12 17:44) [31]

    > Тебе как разработчику "головной программы" остается получив
    > письмо заглянуть в самое последнее поле "Received" его заголовка,
    >  взять оттуда адрес или имя хоста отправителя.

    Откуда мне знать каким клиентом будут отсылаться письма? Под каждый подстраиваться? Зачем еще вклиниваться в завязку с SMTP клиентами и прочей обработкой почтовой корреспонденции аутглюка. Позавчера у нас Exchange сдох, неделю ковырялись, переводили на другой. Толком почта не работает. Отправляли через интернет. Короче нафига лишние хлопоты, когда мне нужно только IP адрес нормально вычислить? Раньше я определялся от доменного имени, но потом решили от доменов отказаться, точнее всех ввести в один домен,  а привязаться - к 3 октету.
  • Dennis I. Komarov © (18.01.12 18:04) [32]
    Возвращаемся к пирожникам и т.п.

    Ты написал софт, исходя из видения проблемы своими глазами и соответствующих своих знаниях (которых оказалось не достаточно т.к. "Я не сетевик" и баста). Теперь получил за это граблями от камеры.
    Далее два пути:
    1 - курить rfc по почтовым протоколам и переделать свой софт
    2 - склепать заплатку, авось и так сойдет и получить граблями в следующий раз
  • Сергей М. © (18.01.12 21:55) [33]

    > Откуда мне знать каким клиентом будут отсылаться письма?


    А тебе и знать это не нужно.

    Любой приличный smtp-сервер соблюдает правила, установленные RFC 821, в соответствии с которыми smtp-клиент должен представиться параметром команды HELO/EHLO в сеансе инф.обмена с сервером. Клиент, нарушающий это правило, будь он то хоть Аутглюк хоть СуперПуперХрюк, приличным сервером будет послан лесом.
  • Сергей М. © (18.01.12 22:05) [34]

    > почта не работает. Отправляли через интернет


    Тебе-то до этого какое дело ?
    Этим админы должны заниматься, в крайнем случае продвинутые эникейщики)
    Но ты-то якобы  разработчик !)

    > мне нужно только IP адрес нормально вычислить

    Да даже если и так, то ты как разработчик обязан был видеть, что

    Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);

  • Laguna © (18.01.12 23:07) [35]
    Dennis I. Komarov ©
    Сергей М. ©


    Ребята, я конечно преклоняюсь перед вашим мастерством. Но данную ситуацию нельзя назвать проблемой повышенного разряда. Ведь код программы для всех районов одинаковый. Видать нужно привести еще немного кода, чтобы вы меня не считали ваще за идиота, который сам не понимает чего хочет. Как я уже писал, что в зависимости от того, кто передает данные, программа в базу на сервере запишет его ID(буду уже так говорить). Вот такие примеры для пояснения почему нужна привязка по IP. Допустим, повторяюсь, регион сформировал данные для отправки по почте оператору. Автоматизация здесь не нужна, т.к. полученные данные всерано оператором перпроверяются и вводяися руками в другую программу. Для того чтобы знать какой район привязан к какому оператору, в программе прописан массив адресов(вымышленные):

    OperSDO_A  : Array[1..9] of String[30] = ('operator1@region.firma.ru', 'operator3@region.firma.ru',
                                             'operator5@region.firma.ru', 'operator6@region.firma.ru',
                                             'operator7@region.firma.ru', 'operator8@region.firma.ru',
                                             'operator9@region.firma.ru', 'operator10@region.firma.ru',
                                             'operator12@region.firma.ru');



    затем мы вычисляем, кому конкретно слать письмо с данными

    function RupsOperSDOFromIP : Byte;
    Var
     oktet : String;
    begin
     oktet := ExtractWord(3, GetLocalIP, ['.']);
     Case StrToInt(oktet) of
       104, 112, 136 : Result := 1;
            201, 240 : Result := 2;
            216, 168 : Result := 3;
             248, 80 : Result := 4;
             88, 224 : Result := 5;
       160, 208, 192 : Result := 6;
         152, 60, 61 : Result := 7;
       184, 128, 176 : Result := 8;
        232, 96, 120 : Result := 9;
     else
       Result := 0;
     end;{Case}
    end;


    затем отправляем письмо конкретному адресату

    PolMail.Add(OperSDO_A[RupsOperSDOFromIP]);   // часть процедуры отпраки письма



    прямая запись в базу ID региона через функцию(упрощенно показано)

    function RupsKodFromIP : Byte;
    Var
     oktet : String;
    begin
     oktet := ExtractWord(3, GetLocalIP, ['.']);
     Case StrToInt(oktet) of
    60,61 : Result := 1;
       80 : Result := 2;
      248 : Result := 3;
       88 : Result := 4;
       96 : Result := 5;
      104 : Result := 6;
      112 : Result := 7;
      120 : Result := 8;
      128 : Result := 9;
      152 : Result := 10;
      160 : Result := 11;
      168 : Result := 12;
      176 : Result := 13;
      184 : Result := 14;
      216 : Result := 15;
      192 : Result := 16;
      136 : Result := 17;
      201 : Result := 18;
      208 : Result := 19;
      224 : Result := 20;
      232 : Result := 21;
      240 : Result := 22;
     else
       Result := 0;
     end;{case}
    end;




    > Да даже если и так, то ты как разработчик обязан был видеть,
    >  чтоResult := iNet_ntoa(PInAddr(p^.h_addr_list^)^);

    Сергей, если честно я не разбирался с этой функцией, я просто ее использовал. Если не трудно скажи, что ты этим хотел сказать.
  • Dennis I. Komarov © (18.01.12 23:08) [36]

    > Да даже если и так, то ты как разработчик обязан был видеть,
    >  что
    >
    > Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);

    Он же не сетевик - у него адрес у машины ([25]), а то что они не у машины и их много до сих пор нишьт ферштейн...
  • Dennis I. Komarov © (18.01.12 23:11) [37]
    покажи код приема сообщения от региона...
  • Сергей М. © (18.01.12 23:22) [38]

    > Laguna ©   (18.01.12 23:07) [35]


    Это ты сейчас фрагмент чего привел - фрагмент "головной программы" ?


    > что ты этим хотел сказать


    List в переводе с вражеского - это список.
    Присутствие слова List = "список" в и дентификаторе поля
    h_addr_list

    разве тебе ни о чем как разработчику не говорит ?
  • Сергей М. © (18.01.12 23:43) [39]
    Кажись я начинаю соображать что здесь за каша)

    Твоя клиентская часть, автоматизирующая отправку отчетов, локальному IP-адресу пытается однозначно сопоставить email-адрес, на который отчет должен быть отправлен. Типа чтобы у серверной части - получателя ("головной программы" или что там у тебя - не знаю) не болела голова о сортировке поступающих отчетов по отправителям.

    И это вместо того чтобы завести один-единственный почтовый ящик, кидать туда (автоматически или вручную - не важно) всю корреспонденцию с отчетами и научить программу-получателя выгребать этот ящик и автоматически сортировать входящую корреспонденцию по признакам, фигурирующим в заголовках писем, в том числе и в первую очередь по полю "Received", коль речь идет об идентификации по IP-адресу хоста-отправителя.
 
Конференция "Сети" » Корректное определение IP адреса сетевой карты [D7, WinXP]
Есть новые Нет новых   [134435   +13][b:0][p:0.003]