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


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Gleb Smirnoff                        2:5020/400     10 Sep 2005  07:18:35
 To : Slawa Olhovchenkov
 Subject : Re: divert
 -------------------------------------------------------------------------------- 
 
 Slawa Olhovchenkov <Slawa.Olhovchenkov@f500.n5030.z2.fidonet.org> wrote:
 
 SO> Правило ipfw: divert 9999 udp from any to 255.255.255.255 recv ng*
 
 SO> Открыти/биндинг проходит нормально, дальше я только существенные куски буду
 SO> давать.
 SO> dhcp живет в локалке, на fxp0, 10.200.0.1/24
 SO> vpn -- mpd, 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));
 
 А почему не делать просто
 sendto(divert, buf, size, 0, (struct sockaddr *)&from, &from_len);
 ?
 
 Во всяком случае так в мануале советуют?
 
 SO> Все работает, но ответов от dhcpd прилетает _два_. Такое впечатление, что
 SO> пакет попадает к dhcpd дважды.
 
 А читается из сокета точно один? Если запустить и твою программку и dhcpd
 с дебагом, что бы печатали про каждый пакет, то какая картина выходит?
 
 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 для адреса 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> Где я неправ?
 
 Еще имеет смысл вставить log к правилу divert и к тому, что ниже его.
 
 -- 
 Totus tuus, Glebius.
 GLEBIUS-RIPN GLEB-RIPE
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 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/6577f7a71aa6.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional