Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Slawa Olhovchenkov                   2:5030/500     10 Sep 2005  10:28:18
 To : Gleb Smirnoff
 Subject : divert
 -------------------------------------------------------------------------------- 
 
 
 10 Sep 05, Gleb Smirnoff writes to Slawa Olhovchenkov:
  SO>> Правило ipfw: divert 9999 udp from any to 255.255.255.255 recv ng*
 
  SO>> Открыти/биндинг проходит нормально, дальше я только существенные куски
  SO>> буду давать. dhcp живет в локалке, на fxp0, 10.200.0.1/24 vpn -- mpd,
  SO>> proxy arp, 10.200.0.160 (для определенности)
 
  SO>> struct ip *pkt;
  SO>> struct udphdr *ud;
 
  SO>> bzero(&dest, sizeof(dest));
  SO>> dest.sin_family = AF_INET;
  SO>> dest.sin_addr.s_addr = htonl((u_long)INADDR_ANY);
 
  SO>> from_len = sizeof(from);
  SO>> size = recvfrom(divert, buf, sizeof(buf), 0, (struct sockaddr *)&from,
  SO>> &from_len);
  SO>> dest.sin_port = from.sin_port;
  SO>> pkt = (struct ip *)buf;
  SO>> ud = (struct udphdr *)(buf + (pkt->ip_hl << 2));
  SO>> inet_aton("10.200.0.255", &pkt->ip_dst);
  SO>> pkt->ip_sum = IpChecksum(pkt);
  SO>> ud->uh_sum = 0;
  SO>> sendto(divert, buf, size, 0, (struct sockaddr *)&dest, sizeof(dest));
 
  GS> А почему не делать просто
  GS> sendto(divert, buf, size, 0, (struct sockaddr *)&from, &from_len);
  GS> ?
 
  GS> Во всяком случае так в мануале советуют?
 
 я хочу входной интерфейс поменять. с ng0 на fxp0. что бы dhcpd обмануть.
 
  SO>> Все работает, но ответов от dhcpd прилетает _два_. Такое впечатление,
  SO>> что пакет попадает к dhcpd дважды.
 
  GS> А читается из сокета точно один?
 
 ага
 
  GS> Если запустить и твою программку и dhcpd с дебагом, что бы печатали
  GS> про каждый пакет, то какая картина выходит?
 
 я даже с tcpdump запускал.
 прилетает один, програмка говорит один, dhcpd радостно орет про два, tcpdump
 показывает два ответа.
 
  SO>> Более того, если я вместо 10.200.0.255 пишу 10.200.0.19 он все равно
  SO>> умудряется отвечать! такое впечатление, что отдиверченный пакет
  SO>> продолжает обрабатываться независимо. Hо если я не меняю ip_dst у
  SO>> пакета -- то и единственного ответа нету.
 
  SO>> val = 1; res = setsockopt(divert, SOL_SOCKET, SO_BROADCAST, &val,
  SO>> sizeof(val));
 
  SO>> поведение не меняет.
 
  SO>> Ладно, пробуем иначе
 
  SO>> sin.sin_family = AF_INET;
  SO>> inet_aton("10.200.0.1", &sin.sin_addr);
  SO>> strlcpy(sin.sin_zero, "fxp0", sizeof(sin.sin_zero));
  SO>> from_len = sizeof(from);
  SO>> size = recvfrom(divert, buf, sizeof(buf), 0, (struct sockaddr *)&from,
  SO>> &from_len);
  SO>> sin.sin_port = from.sin_port;
  SO>> pkt = (struct ip *)buf;
  SO>> ud = (struct udphdr *)(buf + (pkt->ip_hl << 2));
  SO>> sendto(divert, buf, size, 0, (struct sockaddr *)&sin, sizeof(sin));
 
  SO>> типа пакет должен якобы приняться с интерфейса fxp0 для адреса
  SO>> 10.200.0.1.
 
  SO>> Фиг. dhcpd не видит, tcpdump на fxp0 ничего не кажет.
 
  SO>> добавляем
 
  SO>> inet_aton("10.200.0.1", &pkt->ip_dst);
  SO>> pkt->ip_sum = IpChecksum(pkt);
  SO>> ud->uh_sum = 0;
 
  SO>> результат -- аналогично отрицательный.
 
  SO>> Где я неправ?
 
  GS> Еще имеет смысл вставить log к правилу divert и к тому, что ниже его.
 
 Как должен выглядеть log "к тому, что ниже его"?
 
 ... Здесь вам не Aнглия, копайте глубже!
 --- GoldED+/BSD 1.1.5
  * Origin:  (2:5030/500)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 divert   Slawa Olhovchenkov   09 Sep 2005 21:41:54 
 Re: divert   Gleb Smirnoff   10 Sep 2005 07:18:35 
 divert   Slawa Olhovchenkov   10 Sep 2005 10:28:18 
 divert   Slawa Olhovchenkov   10 Sep 2005 15:42:28 
 divert   Slawa Olhovchenkov   10 Sep 2005 16:02:32 
 Re: divert   Gleb Smirnoff   10 Sep 2005 22:20:36 
 divert   Slawa Olhovchenkov   10 Sep 2005 22:35:44 
 Re: divert   Gleb Smirnoff   11 Sep 2005 18:16:24 
 divert   Slawa Olhovchenkov   11 Sep 2005 20:17:38 
 divert   Vitalij Dodonov   21 Sep 2005 15:27:23 
 divert   Slawa Olhovchenkov   21 Sep 2005 15:47:20 
 divert   Vitalij Dodonov   21 Sep 2005 17:00:23 
 divert   Slawa Olhovchenkov   21 Sep 2005 18:00:22 
 Re: divert   Eugene Grosbein   10 Sep 2005 10:35:04 
 divert   Slawa Olhovchenkov   10 Sep 2005 10:32:04 
 Re: divert   Eugene Grosbein   10 Sep 2005 14:04:42 
 divert   Slawa Olhovchenkov   10 Sep 2005 11:25:58 
Архивное /ru.unix.bsd/222143227dce.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional