про libnet

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

про libnet

irix
Hello Openbsd,

  Мак в проге выдираеться вот таким способом

  #include <libnet.h>

int main(int argc, char *argv[]) {
    libnet_t *ln;
    struct ether_addr *ha = NULL;
    char ebuf[LIBNET_ERRBUF_SIZE] = "\0";

    if (!(ln = libnet_init(LIBNET_LINK_ADV, argv[1], ebuf))) {
        fprintf(stderr, "%s", ebuf);
        exit(EXIT_FAILURE);
    }

    if ((ha = (struct ether_addr *) libnet_get_hwaddr(ln)) == NULL) {
        fprintf(stderr, "%s", libnet_geterror(ln));
        exit(EXIT_FAILURE);
    }

    printf("hwaddr: %s\n", ether_ntoa(ha));

    libnet_destroy(ln);

    return 0;
}

 Но показывает какую-то фигню вместо мака интерфейса
 например вот это ca:0a:00:00:00:00

 Как нужно изменить конструкцю чтобы показывало нормальный мак
интерфейса
--
Best regards,
 irix                          mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: про libnet

Ilya A. Kovalenko
>  Но показывает какую-то фигню вместо мака интерфейса
>  например вот это ca:0a:00:00:00:00

>  Как нужно изменить конструкцю чтобы показывало нормальный мак
> интерфейса

угу ... из-за этой х@йни, начиная с 4.3 не работает arping -
при запуске травит собственные ARP-записи у соседей по сегменту и,
как следствие уходит в оффлайн :(


Reply | Threaded
Open this post in threaded view
|

Re: про libnet

Mike Belopuhov
так посмотрите что происходит на уровне ioctl'ей.
ktrace его панимаш.  может это буг в libnet.

Ilya A. Kovalenko wrote:

>>  Но показывает какую-то фигню вместо мака интерфейса
>>  например вот это ca:0a:00:00:00:00
>
>>  Как нужно изменить конструкцю чтобы показывало нормальный мак
>> интерфейса
>
> угу ... из-за этой х@йни, начиная с 4.3 не работает arping -
> при запуске травит собственные ARP-записи у соседей по сегменту и,
> как следствие уходит в оффлайн :(
>
>


Reply | Threaded
Open this post in threaded view
|

Re[2]: про libnet

irix
Hello Mike,

Wednesday, August 13, 2008, 1:21:22 PM, you wrote:

MB> так посмотрите что происходит на уровне ioctl'ей.
MB> ktrace его панимаш.  может это буг в libnet.

MB> Ilya A. Kovalenko wrote:

>>>  Но показывает какую-то фигню вместо мака интерфейса
>>>  например вот это ca:0a:00:00:00:00
>>
>>>  Как нужно изменить конструкцю чтобы показывало нормальный мак
>>> интерфейса
>>
>> угу ... из-за этой х@йни, начиная с 4.3 не работает arping -
>> при запуске травит собственные ARP-записи у соседей по сегменту и,
>> как следствие уходит в оффлайн :(
>>
>>

Миша расскажи как сделать эту выборку в двух словах :)





--
Best regards,
 irix                            mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re[3]: про libnet

irix
In reply to this post by Mike Belopuhov
блин хочу вывод ктрасы выложить а письма не доходят
теста 55кил
или может файл прикрепить ?


Reply | Threaded
Open this post in threaded view
|

Re: про libnet

Maxim Tsyplakov-2
irix пишет:
> блин хочу вывод ктрасы выложить а письма не доходят
> теста 55кил
> или может файл прикрепить ?
>  
можно выложить на какой-нибудь сайт и потом ссылку в студио %)


Reply | Threaded
Open this post in threaded view
|

Re: про libnet

Mike Belopuhov
In reply to this post by irix
re,

внизу shell архив с программкой достающей мак адрес правильно.
посмотрите что делает libnet в libnet_get_hwaddr

irix wrote:
> Hello Openbsd,
>
>   Мак в проге выдираеться вот таким способом
>


вот тут: http://www.packetfactory.net/Projects/Libnet/manual/5.html
написано что у libnet_get_hwaddr совсем другой прототип:

struct ether_addr *
libnet_get_hwaddr(struct libnet_link_int *l, const u_char *device,
                   const u_char *ebuf);

>   #include <libnet.h>
>
> int main(int argc, char *argv[]) {
>     libnet_t *ln;
>     struct ether_addr *ha = NULL;
>     char ebuf[LIBNET_ERRBUF_SIZE] = "\0";
>
>     if (!(ln = libnet_init(LIBNET_LINK_ADV, argv[1], ebuf))) {
>         fprintf(stderr, "%s", ebuf);
>         exit(EXIT_FAILURE);
>     }
>
>     if ((ha = (struct ether_addr *) libnet_get_hwaddr(ln)) == NULL) {
>         fprintf(stderr, "%s", libnet_geterror(ln));
>         exit(EXIT_FAILURE);
>     }
>
>     printf("hwaddr: %s\n", ether_ntoa(ha));
>
>     libnet_destroy(ln);
>
>     return 0;
> }
>
>  Но показывает какую-то фигню вместо мака интерфейса
>  например вот это ca:0a:00:00:00:00
>
>  Как нужно изменить конструкцю чтобы показывало нормальный мак
> интерфейса

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#       lladdr
#       lladdr/Makefile
#       lladdr/lladdr.c
#
echo c - lladdr
mkdir -p lladdr > /dev/null 2>&1
echo x - lladdr/Makefile
sed 's/^X//' >lladdr/Makefile << 'END-of-lladdr/Makefile'
XPROG=  lladdr
X
XCFLAGS+=-Wall -W -Werror -pedantic
X
X.include <bsd.prog.mk>
END-of-lladdr/Makefile
echo x - lladdr/lladdr.c
sed 's/^X//' >lladdr/lladdr.c << 'END-of-lladdr/lladdr.c'
X#include <sys/types.h>
X#include <sys/socket.h>
X#include <net/if.h>
X#include <net/if_dl.h>
X#include <net/if_media.h>
X#include <net/if_types.h>
X#include <netinet/in.h>
X#include <netinet/if_ether.h>
X#include <err.h>
X#include <ifaddrs.h>
X#include <stdio.h>
X#include <stdlib.h>
X#include <string.h>
X#include <unistd.h>
X
Xstatic void __dead usage(void);
X
Xint
Xmain(int argc, char **argv)
X{
X    struct ifaddrs *ifap, *ifa;
X    char *iface = NULL;
X
X    if (argc == 2) {
X        if (strlen(argv[1]) > 2)
X            iface = argv[1];
X        else
X           usage();
X    }
X    if (argc > 2)
X        usage();
X    if (getifaddrs(&ifap) != 0)
X        err(1, "getifaddrs");
X
X    for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
X        if (iface) {
X            if (strcmp(iface, ifa->ifa_name) != 0)
X                continue;
X        }
X        if (ifa->ifa_addr->sa_family != AF_LINK)
X            continue;
X        if (!iface)
X            printf("%s: ", ifa->ifa_name);
X        printf("%s\n", ether_ntoa((struct ether_addr *)
X          LLADDR((struct sockaddr_dl *)ifa->ifa_addr)));
X    }
X    return (0);
X}
X
Xstatic void __dead
Xusage(void)
X{
X    extern char *__progname;
X    fprintf(stderr, "usage: %s [iface]\n", __progname);
X    _exit(1);
X}
END-of-lladdr/lladdr.c
exit


Reply | Threaded
Open this post in threaded view
|

Re: про libnet

Mike Belopuhov
In reply to this post by irix
irix wrote:
> Hello Mike,
>
> Wednesday, August 13, 2008, 1:21:22 PM, you wrote:
>
> MB> так посмотрите что происходит на уровне ioctl'ей.
> MB> ktrace его панимаш.  может это буг в libnet.
>

там не ioctl а getifaddrs(3), который дергает sysctl(3)...
так что по ktrac'у будет толком не видно..

> MB> Ilya A. Kovalenko wrote:
>>>>  Но показывает какую-то фигню вместо мака интерфейса
>>>>  например вот это ca:0a:00:00:00:00
>>>>  Как нужно изменить конструкцю чтобы показывало нормальный мак
>>>> интерфейса
>>> угу ... из-за этой х@йни, начиная с 4.3 не работает arping -
>>> при запуске травит собственные ARP-записи у соседей по сегменту и,
>>> как следствие уходит в оффлайн :(
>>>
>>>
>
> Миша расскажи как сделать эту выборку в двух словах :)
>