Page 1 of 13 12311 ... LastLast
Results 1 to 15 of 183

Thread: Авторизатор на роутере

  1. #1

    Thumbs up Авторизатор на роутере

    здраствуйте у моего провайдера есть прога(клиентская) которая управляет доступом в инет. есть версия под линукс и скрипт на perl, на сколько я знаю perl в нашем родном асусе есть (у меня 500г делюкс). вопрос как его туда запихнуть и как управлять его работой?

    вот тект скрипта на перл:
    #!/usr/bin/perl -w
    #
    #use strict;
    use IO::Socket ();
    use Digest::MD5 ();

    use vars qw(%secret);

    $| = 1;

    my $PORT = 8899;
    my $MIN_CHALLENGE_LENGTH = 32;
    my $MAX_CHALLENGE_LENGTH = 64;

    if ($#ARGV < 2 or ($ARGV[1] ne "1" and $ARGV[1] ne "2")) {
    print "Usage: $0 password accesslevel gatewayaddress\n";
    print " where access level is 1 or 2 -- internal and external traffic.\n";
    die;
    }
    my $PASS = $ARGV[0];
    my $ACCLEV = $ARGV[1];
    my $GWADDR = $ARGV[2];

    my $proto = "";
    my $h = IO::Socket::INET->new('PeerAddr' => $GWADDR,
    'PeerPort' => $PORT);
    &read_handle(\$proto, 1);
    if (ord($proto) == 2) { # redirect to real firewall
    my $gw_len;
    &read_handle(\$gw_len, 1);
    $gw_len = ord($gw_len);
    die "Invalid gateway address length $gw_len.\n" if $gw_len < 7 or $gw_len > 15;
    &read_handle(\$GWADDR, $gw_len);
    $h->close;
    $h = IO::Socket::INET->new('PeerAddr' => $GWADDR,
    'PeerPort' => $PORT);
    &read_handle(\$proto, 1);
    }
    die "Access denied.\n" if ord($proto) == 0;
    die "Invalid authentication protocol.\n" if ord($proto) != 1;

    my $rin = "";
    my $chal_len = "";
    my $challenge = "";
    my $result = "";
    my $ctx = Digest::MD5->new;
    my $sockhost = $h->sockhost();
    # print "Run from $sockhost: ";

    my $firsttime = 1;
    while ($h->opened) {
    $rin = "";
    vec($rin, fileno($h), 1) = 1;
    my $nf = select($rin, undef, undef, 0);
    # print "nf: $nf\n";
    last if $nf == 1;

    &read_handle(\$chal_len, 1);
    $chal_len = ord($chal_len);
    die "Invalid challenge length $chal_len.\n"
    if $chal_len < $MIN_CHALLENGE_LENGTH or $chal_len > $MAX_CHALLENGE_LENGTH;
    &read_handle(\$challenge, $chal_len);

    $ctx->new;
    $ctx->add($challenge);
    $ctx->add($sockhost);
    $ctx->add($ACCLEV.$PASS);
    my $ident = $ctx->digest;

    syswrite($h, $ident, 16);
    &read_handle(\$result, 1);
    $result = ord($result);
    if ($result == 1 or $result == 2) {
    print "Ok!\n" if $firsttime;
    } else {
    die "Failed...\n" if $firsttime;
    }
    $firsttime = 0;
    }

    sub read_handle {
    my($ref, $len) = @_;
    die "Socket closed.\n" if !$h->opened;
    my $recvlen = sysread($h, ${$ref}, $len);
    die "Error reading socket.\n" if !defined($recvlen) or $recvlen != $len;
    }

  2. #2
    да и раз уж тему создал, я как-то задавал вопрос про немонтрирование флешки, я ее переформатировал, но она все равно не монтируется (в отличие от штук 5 других а так же усб-флоппика), вот логи при загрузке роутера с флешкой:
    Nov 25 06:34:57 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:34:57 kernel: usb.c: USB device not responding, giving up (error=-145)
    Nov 25 06:34:57 kernel: hub.c: new USB device 01:02.2-2, assigned address 3
    Nov 25 06:35:02 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:35:07 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:35:12 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:35:17 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:35:22 kernel: usb_control/bulk_msg: timeout
    Nov 25 06:35:22 kernel: usb.c: USB device not responding, giving up (error=-145)

  3. #3
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Перл на wl500g ущербный, этот код работать не будет.
    Переводите в Си и компилируйте бинарник.

    P.S. Насчёт флешки - видно не судьба. И просьба - создавайте отдельные темы, чтобы потом поиском можно было пользоваться.

  4. #4
    ладно буду создавать отдельные темы , ща откопаю исходник на си, просто проблема в том что я не совсем понимаю как им управлять по ssh и вообще удаленно
    вот исходник:
    /*
    * lanauth client
    * (c) visir
    * "THE BEER-WARE LICENSE" (Revision 42):
    * <visir@telenet.ru> wrote this file. As long as you retain this notice you
    * can do whatever you want with this stuff. If we meet some day, and you think
    * this stuff is worth it, you can buy me a beer in return.
    * compile: gcc -O2 -Wall -s -lcrypto -o lanauth lanauth.c
    * run: ./lanauth -p yourpassword
    */

    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<signal.h>
    #include<errno.h>
    #include<netinet/in.h>
    #include<arpa/inet.h>
    #include<sys/time.h>
    #include<sys/socket.h>
    #include<unistd.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<stdarg.h>
    #include<string.h>
    #include<syslog.h>
    #include<openssl/md5.h>
    #include<openssl/ripemd.h>

    int nodaemon = 0; /* don't become daemon */
    int nobind = 1; /* don't really bind, just assume we binded */
    int nolip = 0; /* don't touch localip */
    int ver = 1; /* protocol version */
    int level = 2; /* access level */
    int sock = -1; /* socket */
    int first; /* first try */
    unsigned char localip[16], gateip[16], pass[21], challenge[256], digest[256];

    void opensock(); /* connect to server */
    void auth1(); /* generate response for v1 protocol */
    void auth2(); /* generate response for v2 protocol */
    void sigusr(int sig); /* change access level */
    int tmread(char *buf, int size, int timeout); /* read with timeout */
    #define tryread(buf,size,tm) if(!tmread(buf,size,tm))\
    { close(sock); if(first)sleep(5); continue; }
    void usage()
    {
    printf("Usage: lanauth [-i] [-v 1|2] [-b localip] [-n] [-g gid] [-u uid] [-s gateip] [-l accesslevel] -p password\n");
    exit(0);
    }

    void fatal(char *s, ...)
    {
    va_list ap;
    va_start(ap, s);
    vsyslog(LOG_ERR, s, ap);
    va_end(ap);
    exit(1);
    }

    int main(int argc, char **argv)
    {
    char *s;
    int ch;
    strcpy(gateip, "10.0.0.1");
    /* process command line arguments */
    while((ch = getopt(argc, argv, "iv:b:ns:l:u:g:")) != -1) {
    switch(ch) {
    case 'i':
    nodaemon = 1;
    break;
    case 'v':
    ver = atoi(optarg);
    if(ver != 1 && ver != 2)usage();
    break;
    case 'b':
    strncpy(localip, optarg, sizeof(localip)-1);
    localip[sizeof(localip)-1] = 0;
    nobind = 0;
    nolip = 1;
    break;
    case 'n':
    nobind = 1;
    if(!nolip)usage();
    break;
    case 's':
    strncpy(gateip, optarg, sizeof(gateip)-1);
    gateip[sizeof(gateip)-1] = 0;
    break;
    case 'p':
    strncpy(pass, optarg, sizeof(pass)-1);
    pass[sizeof(pass)-1] = 0;
    /* hide password */
    for(s = optarg; *s; s++) *s = '*';
    break;
    case 'l':
    level = atoi(optarg);
    break;
    case 'u':
    setuid(atoi(optarg));
    break;
    case 'g':
    setgid(atoi(optarg));
    break;
    default:
    usage();
    }}

    if(!*pass)usage();

    openlog(NULL, nodaemon ? LOG_PERROR|LOG_PID : LOG_PID, LOG_DAEMON);

    signal(SIGUSR1, sigusr);
    signal(SIGUSR2, sigusr);
    if(!nodaemon) {
    signal(SIGPIPE, SIG_IGN);
    signal(SIGHUP, SIG_IGN);
    daemon(0, 0);
    }

    /* main loop */
    while(1) {
    /* connect to server */
    opensock();
    ch = 0;
    first = 1;
    /* start conversation */
    tryread((char*)&ch, 1, 10);
    switch(ch) {
    case 0: /* access closed */
    syslog(LOG_NOTICE, "access closed for us");
    close(sock);
    sleep(60);
    case 1: /* continue authorization */
    break;
    case 2: /* redirect to real server */
    read(sock, (char*)&ch, 1);
    if(ch < 7 || ch > 15)
    fatal("redirect: invalid gateway lenght %d", ch);
    read(sock, gateip, ch);
    gateip[ch] = 0;
    syslog(LOG_NOTICE, "gate changed to %s", gateip);
    close(sock);
    break;
    default:
    close(sock);
    syslog(LOG_NOTICE, "unknown protocol %d", ch);
    sleep(60);
    break;
    }
    if(ch != 1)continue;
    /* main loop of challenge-response authorization */
    next:
    tryread(challenge, sizeof(challenge), 200);
    switch(ver) {
    case 1: auth1(); break;
    case 2: auth2(); break;
    }
    write(sock, digest, (ver == 1) ? 16 : 256);
    tryread((char*)&ch, 1, 10);
    if(first) {
    first = 0;
    syslog(LOG_NOTICE, "auth succeful, access level = %d", ch);
    }
    goto next;
    }
    }

    void sigusr(int sig)
    {
    switch(sig) {
    case SIGUSR1:
    level = 1;
    signal(SIGUSR1, sigusr);
    break;
    case SIGUSR2:
    level = 2;
    signal(SIGUSR2, sigusr);
    break;
    }
    }

    void opensock()
    {
    struct sockaddr_in sin;
    int len;
    again:
    /* create socket */
    if((sock = socket(PF_INET, SOCK_STREAM, 0)) == -1)fatal("socket: %m");

    /* bind it to specified ip, if needed */
    if(*localip && !nobind) {
    bzero(&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr(localip);
    sin.sin_port = 0;
    if(sin.sin_addr.s_addr == INADDR_NONE)
    fatal("%s: invalid ip address", localip);
    if(bind(sock, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    fatal("bind: %m");
    }

    /* connect to server */
    bzero(&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr(gateip);
    sin.sin_port = htons((ver == 1) ? 8899 : 8314);
    if(sin.sin_addr.s_addr == INADDR_NONE)
    fatal("%s: invalid ip address", gateip);

    if(connect(sock, (struct sockaddr*)&sin, sizeof(sin)) == -1) {
    syslog(LOG_NOTICE, "connect: %m");
    sleep(30);
    close(sock);
    goto again;
    }

    /* save localip, if needed */
    len = sizeof(sin);
    getsockname(sock, (struct sockaddr*)&sin, &len);
    if(!nolip)strcpy(localip, inet_ntoa(sin.sin_addr));
    // syslog(LOG_DEBUG, "connected, local ip is %s", localip);
    }

    int tmread(char *buf, int size, int timeout)
    {
    fd_set fds;
    int n;
    struct timeval tv;
    /* wait */
    FD_ZERO(&fds);
    FD_SET(sock, &fds);
    tv.tv_sec = timeout;
    tv.tv_usec = 0;
    n = select(sock+1, &fds, NULL ,NULL, &tv);
    if(n < 0 && errno == EINTR) {
    syslog(LOG_DEBUG, "reconnecting by request");
    return 0;
    }
    if(n < 0)fatal("select: %m");
    if(!n) {
    syslog(LOG_DEBUG, "no response from server, reconnecting");
    return 0;
    }
    /* read */
    n = read(sock, buf, size);
    if(n < 0) {
    syslog(LOG_DEBUG, "read: %m");
    return 0;
    }
    if(!n) {
    syslog(LOG_DEBUG, "server closed connection");
    return 0;
    }
    return n;
    }

    void auth1()
    {
    MD5_CTX ctx;
    MD5_Init(&ctx);
    MD5_Update(&ctx, challenge+1, challenge[0]);
    MD5_Update(&ctx, localip, strlen(localip));
    level += '0';
    MD5_Update(&ctx, &level, 1);
    level -= '0';
    MD5_Update(&ctx, pass, strlen(pass));
    MD5_Final(digest, &ctx);
    }

    void auth2()
    {
    RIPEMD160_CTX ctx;
    int i;
    for(i = 0; i < 255; i++)digest[i] = rand() % 256;
    digest[0] = level - 1;
    digest[1] = 2 + rand() % 230;
    RIPEMD160_Init(&ctx);
    RIPEMD160_Update(&ctx, challenge+1, challenge[0]);
    RIPEMD160_Update(&ctx, pass, strlen(pass));
    RIPEMD160_Final(digest+digest[1], &ctx);
    }

  5. #5
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Перешлите мне почтой этот файл предварительно запаковав (или дайте ссылку) и я постараюсь откомпилировать его.

  6. #6
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Упс... Он использует openssl - требуется адаптация... Может Вы свяжетесь с автором и он Вам сделает это за пиво?

  7. #7
    Quote Originally Posted by Oleg
    Упс... Он использует openssl - требуется адаптация... Может Вы свяжетесь с автором и он Вам сделает это за пиво?
    а какая конкретно адаптация, с автором конецно попробую связаться, но сначало мне бы хотелось понять что тут требуется...
    З.Ы. щас вышлю на мыло и исходник и откомпилированный файл

  8. #8
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Требуется отвязаться от использования openssl, т.е. добавить реализацию MD5.

  9. #9

    Asus wl500g и авторизация в Горсети

    Здравствуйте. Я живу в Зеленограде. У нас тут есть городская сеть, к которой я подключён. В ней идентификация пользователя происходит посредством авторизатора. У меня есть авторизатор собранный под bsd 5.4. Хотелось бы это собрать для установки на маршрутизатор. Файлы исходников могу выслать по почте. Есть ли вообще такая возможность?

  10. #10
    Quote Originally Posted by Venik
    идентификация пользователя происходит посредством авторизатора.
    Что за зверь такой авторизатор? Vpn к примеру тоже можно неким авторизатором обозвать.

  11. #11
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    Quote Originally Posted by Venik
    Здравствуйте. Я живу в Зеленограде. У нас тут есть городская сеть, к которой я подключён. В ней идентификация пользователя происходит посредством авторизатора. У меня есть авторизатор собранный под bsd 5.4. Хотелось бы это собрать для установки на маршрутизатор. Файлы исходников могу выслать по почте. Есть ли вообще такая возможность?
    Прикрепите исходные тексты прямо к посту, глянем.

  12. #12
    Прикрепите исходные тексты прямо к посту, глянем.
    Пажалста )
    Attached Files Attached Files

  13. #13
    Кстати проблема "авторизатора" тоже будет и в нашей сети в скором времени.
    Это такая прога, которую запускаешь на своем компе и она сама тебя идентифицирует, соединяется с серваком и дает доступ в сеть и инет.
    Это наверное последняя фишка провайдеров в борьбе с роутерами

  14. #14
    Ну не знаю, как там нащот борьбы с роутерами, но я точно знаю, что наш авторизатор посылает каждые 10 сек. какой-то пакет, который идентифицирует пользователя на сервере.

  15. #15
    Venik, я тоже из Зеленоградской Горсети. Тот авторизатор который Вы выложили в форум не подойдет по 2-м причинам:

    - он написан на C++
    - он использует библиотеку Open SSL

    Мне удалось поставить Авторизатор на маршрутизатор (ASUS WL500G Deluxe). Но для этого пришлось сделать следующее:

    - отказаться от прошивки Олега и перейти на OpenWRT RC4
    - переписать Авторизатор на C попутно сделав его Демоном
    - собрать Авторизатор под OpenWRТ и установить на маршрутизатор

    Результами своей работы могу поделиться. Правда оно, скорее всего, будет работать только на OpenWRT и от прошивки Олега придется отказаться ...

Page 1 of 13 12311 ... LastLast

Similar Threads

  1. Фабрика-флудильня
    By vectorm in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1784
    Last Post: 28-01-2020, 23:21
  2. Время на роутере WL-520gU идет медленнее
    By SkiFer in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 70
    Last Post: 20-05-2010, 18:41
  3. Пробросить 25 порт в роутере Asus
    By prettyy in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 2
    Last Post: 19-05-2009, 18:40

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •