eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › pytanie bardziej informatyczne
Ilość wypowiedzi w tym wątku: 17

  • 1. Data: 2022-11-06 06:07:08
    Temat: pytanie bardziej informatyczne
    Od: sundayman <s...@p...onet.pl>

    ale pewnie któryś z kolegów będzie wiedział.

    Jest sobie urządzenie z modemem GPRS. To urządzenie łączy się z
    komputerem, którym można to urządzenie obsługiwać poprzez "chmurę"
    producenta modemów.

    Czyli - w modemie ustawiam sobie adres serwera ( może to być zarówno IP
    jak i domena) , numer portu itp.
    Ze strony PC dokładnie tak samo. I ten serwer zestawia "transparentne
    połączenie" po którym śmigają dane. Ruch jest minimalny, bo modem ma z
    drugiej strony złąćze RS232 i de facto tam latają ramki po paręset
    bajtów raz na jakiś czas.

    Chciałbym, żeby modem nie łączył się z tym serwerem bezpośrednio ale
    przez mój serwer proxy. Czyli modem trafia na mój serwer i on
    pośredniczy w połączeniu z serwerem producenta modemu.

    Docelowo chciałbym postawić sobie ten mój serwer proxy fizycznie u
    siebie, ale to ciut później.
    Teraz najwygodniej byłoby mi to zrobić na moim serwerze ( na seohost) ,
    na którym trzymam strony internetowe. Albo kupiłbym jakiś prosty VPS u
    nich jeśli tak będzie lepiej.

    Pytanie - na czym da się to zrobić najprościej dla kogoś ( znaczy mnie )
    kto linuxa zna słabo i ogólnie ma doświadczenie z serwerami na poziomie
    pozwalającym zrobienie sobie strony, poczty itp pierdoły podstawowe.

    Poczytałem trochę tego rodzaju rzeczy;

    https://www.fosslinux.com/46027/self-hosted-proxy-se
    rvers.htm

    ale niewiele to na razie wniosło w moje życie. Gdybym miał to stawiać na
    własnym biurku to wolałbym coś na (tfu) windows albo OSX.

    Jednym słowem - jak się za to zabrać ?



  • 2. Data: 2022-11-06 06:30:42
    Temat: Re: pytanie bardziej informatyczne
    Od: sundayman <s...@p...onet.pl>

    z tego co poczytałem, to ten proceder można by zrealizować za pomocą
    OpenVPN postawionym np. na UBUNTU na serwerze VPS ?
    Czy tak i czy to jest dobre rozwiązanie ?

    I kolejne pytanie - czy muszę mieć stałe IP do tego VPS czy też na
    przykład można wykorzystać adresowanie przez subdomenę, którą mogę sobie
    założyć na swoim serwerze www ?



  • 3. Data: 2022-11-06 10:04:22
    Temat: Re: pytanie bardziej informatyczne
    Od: Marek <f...@f...com>

    Ale potrzebujesz takie proxy po udp czy TCP? Poniżej kod prostego
    redirectora w warstwie aplikacyjnej. Instrukcja jak użyć i
    skompilować na początku pliku.


    /* 21.3.97
    - opravena chybna manipulace s procesy (uz nevytvari zive mrtvoly)
    -+= chaky =+-
    */

    /* 3.8.97
    - Pridan parametr -n pro zmenu jmena procesu pro lepsi maskovani ;)
    -+= chaky =+-
    */

    /* 21.11 Zmena - moze sa specifikovat uid a gid pod ktorym to vsetko
    bezi */

    /* redirect v2.0
    * By Alhambra (a...@i...com)
    * and
    * Maurautius (m...@l...com)
    * October 6, 1996
    * Usage:
    * redirector [-p localport] [-h remotehost] [-r
    remoteport]
    * ie:
    * redirector -p 4300
    * redirector -p 4400 -h whitehouse.gov -r 25
    *
    * Should be fairly portable...to compile on:
    * Solaris: gcc redirector.c -lsocket -lnsl -o redirector
    * Linux: gcc redirector.c -DLINUX -o redirector
    * Irix: gcc redirector.c -o redirector
    * SunOs: gcc redirector.c -o redirector
    * You get the idea...
    *
    *
    * By default, it now runs on a port which is #defined a few lines
    down...
    * This way, it's a little less obvious what it is from a ps -ef
    *
    *
    * This version also has passwording on the socket. So, when you
    connect, the
    * first thing you need to type in the password, followed by a cr.
    The default
    * password is xxxxx (but you'll change this, right?). SO you'd do
    something
    * like:
    * telnet foobar.com 4678
    * Trying 3.1.3.37
    * Connected to foobar.com
    * Escape character is '^]'.
    * xxxxx
    * placetogo.com porttogoto
    *
    * And you'll be automagically there. There's also a dynamic static
    mode...
    * read the source, and you'll figure it out.
    */



    /* Maximum time for user interaction and connection */
    #define INTERACTION_TIMEOUT 60
    #define CONNECTION_TIMEOUT 100
    #define REDIR_TIMEOUT 180
    #define DEFAULT_PORT 19750
    #define UID 7000
    #define GID 500

    #include <sys/types.h>
    #include <sys/wait.h>

    #include <termios.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>

    #include <sys/param.h>
    #include <sys/times.h>
    #ifdef LINUX
    #include <sys/time.h>
    #endif
    #include <unistd.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <sys/signal.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <string.h>
    #include <sys/stat.h>



    static char localip[64];

    typedef void Sigfunc(int);

    extern int errno;


    void
    usage (char *progname)
    {
    fprintf (stderr, "%s: -l LOCALIP -p LOCALPORT -h REMOTEHOST -r
    REMOTEPORT [-n NEWCMDNAME]\n", progname);
    fprintf (stderr, "example: %s -l 192.168.2.1 -p 9100 -h
    foo.bar.com -r 25 -n httpd\n", progname);
    fflush (stderr);
    exit (1);
    }


    int
    set_fl (int fd, int flags)
    { /* set file descriptor props */
    int val;
    if ((val = fcntl (fd, F_GETFL, 0)) < 0)
    return (-1);
    val |= flags;
    if ((fcntl (fd, F_SETFL, val)) < 0)
    return (-1);
    return (0);
    }

    /*------------------------------------------------
    * s e t u p _ s o c k e t
    *
    */
    int setup_socket (int *tcpsocket, short port)
    { /* set up incoming socket */
    int flag=1;
    struct sockaddr_in serv_addr;

    if ((*tcpsocket = socket (AF_INET, SOCK_STREAM, 0)) < 0)
    {
    printf("socket (AF_INET, SOCK_STREAM, 0)) < 0\n");
    exit (-1);
    }

    setsockopt(*tcpsocket, SOL_SOCKET, SO_REUSEADDR, &flag,
    sizeof(int));

    memset (&serv_addr, 0, sizeof (serv_addr));

    serv_addr.sin_family = AF_INET;
    // serv_addr.sin_addr.s_addr = htonl (INADDR_ANY);
    //
    //inet_aton(localip, &serv_addr.sin_addr);
    serv_addr.sin_addr.s_addr = inet_addr(localip);
    serv_addr.sin_port = htons (port);
    setsockopt(*tcpsocket,SOL_SOCKET,SO_REUSEADDR,0,0);
    setsockopt(*tcpsocket,SOL_SOCKET,SO_LINGER,0,0);
    if (bind (*tcpsocket, (struct sockaddr *) &serv_addr, sizeof
    (serv_addr)) < 0){
    printf("can't bind to %s \n",localip);
    return (-1);

    }

    return (0);
    }



    void
    feed_through (int tcpfd, int outfd)
    {

    fd_set fdvar;
    char buffer[8192];
    int width;
    size_t numbytes;

    width = (tcpfd > outfd) ? tcpfd + 1 : outfd + 1;

    set_fl (outfd, O_NONBLOCK);
    set_fl (outfd, O_NONBLOCK);

    while (1)
    {
    FD_ZERO (&fdvar);
    FD_SET (tcpfd, &fdvar);
    FD_SET (outfd, &fdvar);

    select (width, &fdvar, (fd_set *) 0, (fd_set *) 0, NULL);
    if (FD_ISSET (tcpfd, &fdvar))
    {
    if ((numbytes = read (tcpfd, buffer, sizeof (buffer))) == 0) {
    alarm (0);
    return;
    };
    if ((write (outfd, buffer, numbytes)) != numbytes)
    {
    alarm (0);
    exit (-1);
    }
    }
    else if (FD_ISSET (outfd, &fdvar))
    {
    /* Read from the outfd and write to the tcp */
    if ((numbytes = read (outfd, buffer, sizeof (buffer))) == 0) {
    alarm (0);
    return;
    };
    if ((write (tcpfd, buffer, numbytes)) != numbytes)
    {
    alarm (0);
    exit (-1);
    }
    }
    else
    {
    alarm (0);
    exit (-1);
    }
    }
    alarm (0);
    };


    /*--------------------------------------------------
    * This does the happy UNIX daemon initialization.....
    *
    * Taken from steven's book on unix programming.
    */
    int daemon_init(void) {
    pid_t pid;


    return;
    if ( (pid=fork()) < 0)
    return -1;
    else if (pid != 0)
    exit(0); /* parent goes bye-bye */

    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    setsid(); /* become session leader */
    chdir("/"); /* change working directory */
    umask(0); /* clear file creation mask */
    setuid(UID);
    setgid(GID);
    return 0;
    }


    /*------------------------------------------------
    * f d g e t s
    *
    * fgets (almost) with a file descriptor instead of a stream
    * gets the next non-empty line.
    */
    const char *newln = "\n\r";
    int fdgets(char *buffer, int size, int fd) {
    int i=0;

    /* Start by skipping over any new lines */
    if (read(fd, buffer, 1)==-1) return -1;
    while (strchr(newln, buffer[i]))
    if (read(fd, buffer, 1)==-1) return -1;

    /* Now start really reading the line */
    while (buffer[i] != '\n' && i < size-1) {
    i++;
    if (read(fd, buffer+i, 1)==-1) return -1;
    }

    /* Terminate the string */
    buffer[i] = 0;
    return i;
    }


    /*------------------------------------------------
    * d o C o n n e c t
    */
    int doConnect(char *hostname, short port) {
    int sockfd;
    struct sockaddr_in remote;
    struct hostent *host;

    alarm (CONNECTION_TIMEOUT); /* Reset timeout */

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) return -1;

    host = gethostbyname(hostname);
    if (!host) return -1;

    remote.sin_family = AF_INET;
    memcpy(&remote.sin_addr, host->h_addr_list[0],
    sizeof(remote.sin_addr));
    remote.sin_port = htons(port);
    if (connect(sockfd, (struct sockaddr *) &remote, sizeof(remote)) ==
    -1)
    sockfd = -1;

    alarm (0);
    return sockfd;
    }


    /*------------------------------------------------
    * s t a t i c R e d i r e c t
    */
    void staticRedirect(short localport, char *hostname, short port) {
    int listen_sock, in_sock, out_sock;
    struct sockaddr_in client;
    int client_size;

    alarm (REDIR_TIMEOUT);

    if (setup_socket(&listen_sock, localport) == -1) exit(0);

    listen(listen_sock, 1);

    client_size = sizeof(client);
    in_sock = accept(listen_sock, (struct sockaddr *) &client,
    &client_size);
    if (in_sock == -1) exit(0);

    out_sock = doConnect(hostname, port);
    if (out_sock == -1) exit(0);

    alarm(0);

    feed_through(in_sock, out_sock);
    }


    /*------------------------------------------------
    * i n t e r a c t i o n
    */
    #define BUFFSIZE 100
    void interaction(int sockfd) {
    int outsock;
    char passwd[10];
    char *sep = " \t\n\r";
    char buffer[100];
    char *tok;
    char *hostname, *port, *port2;


    alarm(INTERACTION_TIMEOUT); /* Enable timeout */
    /* avoid "strings" */
    /* set up our 'password' string */
    passwd[0] = 's';
    passwd[1] = 'e';
    passwd[2] = 'r';
    passwd[3] = 't';
    passwd[4] = 0;
    passwd[5] = 0;

    /* Step 1: Check password */
    if (fdgets(buffer, BUFFSIZE, sockfd) < 0) exit(0);

    tok = strtok(buffer, sep);
    if (!tok || strcmp(tok, passwd)) exit (0);

    /* Step 2: Get command */
    if (fdgets(buffer, BUFFSIZE, sockfd) < 0) exit(0);

    hostname = strtok(buffer, sep);
    port = strtok(NULL, sep);
    port2 = strtok(NULL, sep);

    if (strtok(0,sep)) exit(0); /* Bail if there's trailing crap */

    if (!port) exit(0); /* User gave bogus line... */

    alarm(0); /* Disable timeout */
    if (!port2) {
    outsock = doConnect(hostname, atoi(port));
    if (outsock == -1) exit(0);
    feed_through(sockfd, outsock);
    } else { /*-- One-the-fly redirction -----------------*/
    close(sockfd); /* Get rid of user */
    staticRedirect(atoi(port2), hostname, atoi(port));
    }

    exit(0);
    }


    /*------------------------------------------------
    * m a i n
    */
    int main (int argc, char *argv[])
    {
    int c;

    int dset = 0, hset = 0,i;
    int port = DEFAULT_PORT;
    char *host=0, *n_cmdname,cmdtext[255];
    int remote=0;

    int tcpfd, tcpsocket;
    struct sockaddr_in client_addr;
    int client_len;

    pid_t pid;

    int outfd;

    localip[0]=0;

    while ((c = getopt (argc, argv, "p:r:h:n:l:")) != -1)
    switch (c)
    {
    case 'p':
    port = atoi (optarg);
    break;
    case 'r':
    remote = atoi (optarg);
    dset = 1;
    break;
    case 'h':
    host = optarg;
    hset = 1;
    break;

    case 'l':
    strcpy(localip,optarg);
    break;
    case 'n':
    n_cmdname = optarg;
    strcpy(cmdtext,n_cmdname);
    for(i=0;i<argc;i++) {
    memset(argv[i],'\x0',strlen(argv[i]));
    };
    strcpy(argv[0],cmdtext);
    break;
    case '?':
    usage (argv[0]);
    break;
    }

    if(! localip[0]) usage (argv[0]);


    daemon_init(); /* Go into daemon mode... */

    /* Bind the specified port. */
    if (setup_socket (&tcpsocket, port) == -1) {
    /* socket setup error - report somehow? */
    /* Naw, we want to be quiet...no error reporting. */
    /* fprintf (stderr, "Error in seting up the socket.
    Aborting.\n");*/
    exit (-1);
    }

    /* We wait for a connection on the spec. port */
    for (;;) {
    listen (tcpsocket, 5);
    client_len = sizeof (client_addr);
    tcpfd = accept (tcpsocket, (struct sockaddr *) &client_addr,
    &client_len);

    pid=fork();
    setsid();
    if (pid > 0) {
    close(tcpsocket);
    if (dset) {
    outfd = doConnect(host, remote);
    if (outfd == -1) {
    close(tcpfd);

    exit(0);
    };

    feed_through(tcpfd, outfd);
    }
    else {
    interaction(tcpfd);
    };
    close(tcpfd);
    exit(0);

    }
    else {
    close (tcpfd);
    };
    };
    /* End of Main */
    };

    --
    Marek


  • 4. Data: 2022-11-06 11:28:02
    Temat: Re: pytanie bardziej informatyczne
    Od: Cezar <c...@t...pl.invalid>

    On 06/11/2022 05:07, sundayman wrote:
    > ale pewnie któryś z kolegów będzie wiedział.
    >
    > Jest sobie urządzenie z modemem GPRS. To urządzenie łączy się z
    > komputerem, którym można to urządzenie obsługiwać poprzez "chmurę"
    > producenta modemów.
    >
    > Czyli - w modemie ustawiam sobie adres serwera ( może to być zarówno IP
    > jak i domena) , numer portu itp.
    > Ze strony PC dokładnie tak samo. I ten serwer zestawia "transparentne
    > połączenie" po którym śmigają dane. Ruch jest minimalny, bo modem ma z
    > drugiej strony złąćze RS232 i de facto tam latają ramki po paręset
    > bajtów raz na jakiś czas.
    >
    > Chciałbym, żeby modem nie łączył się z tym serwerem bezpośrednio ale
    > przez mój serwer proxy. Czyli modem trafia na mój serwer i on
    > pośredniczy w połączeniu z serwerem producenta modemu.
    >
    > Docelowo chciałbym postawić sobie ten mój serwer proxy fizycznie u
    > siebie, ale to ciut później.
    > Teraz najwygodniej byłoby mi to zrobić na moim serwerze ( na seohost) ,
    > na którym trzymam strony internetowe. Albo kupiłbym jakiś prosty VPS u
    > nich jeśli tak będzie lepiej.
    >
    > Pytanie - na czym da się to zrobić najprościej dla kogoś ( znaczy mnie )
    > kto linuxa zna słabo i ogólnie ma doświadczenie z serwerami na poziomie
    > pozwalającym zrobienie sobie strony, poczty itp pierdoły podstawowe.
    >
    > Poczytałem trochę tego rodzaju rzeczy;
    >
    > https://www.fosslinux.com/46027/self-hosted-proxy-se
    rvers.htm
    >
    > ale niewiele to na razie wniosło w moje życie. Gdybym miał to stawiać na
    > własnym biurku to wolałbym coś na (tfu) windows albo OSX.
    >
    > Jednym słowem - jak się za to zabrać ?
    >
    >

    czy wiesz jakiego VPN/ tunelu używa ten modem?
    czy masz dostęp do konfiguracji czy nawet oprogramowania tego modemu?

    Proxy (jakiekolwiek by to nie było) może nie zadziałać jeżeli producent
    autentykuje / autoryzuje się po PKI


    c.



  • 5. Data: 2022-11-06 12:01:06
    Temat: Re: pytanie bardziej informatyczne
    Od: Mirek <m...@n...dev>

    On 6.11.2022 06:07, sundayman wrote:


  • 6. Data: 2022-11-06 12:05:49
    Temat: Re: pytanie bardziej informatyczne
    Od: Mirek <m...@n...dev>

    On 6.11.2022 12:01, Mirek wrote:
    > On 6.11.2022 06:07, sundayman wrote:

    Dobra, chyba któryś serwer obciął, bo uznał to za niebezpieczne :)
    generalnie chodziło mi o to:
    https://notes.tweakblogs.net/blog/7955/using-netcat-
    to-build-a-simple-tcp-proxy-in-linux.html
    Możesz to odpalić po prostu na serwerze, na którym masz shell-a.

    --
    Mirek.



  • 7. Data: 2022-11-06 13:13:03
    Temat: Re: pytanie bardziej informatyczne
    Od: Dawid Rutkowski <d...@w...pl>

    niedziela, 6 listopada 2022 o 06:07:10 UTC+1 sundayman napisał(a):

    > Jednym słowem - jak się za to zabrać ?

    Ale co właściwie chcesz osiągnąć?
    Podgląd komunikacji?

    Jak serwer jest Twój, czyli nasz roota, to najprostszy będzie DNAT.
    Ustawiasz w modemie jako adres serwera adres Twojego serwera, patrzysz tcpdumpem, na
    którym porcie modem puka, a pitem ustawiasz DNAT tego portu na serwer producenta.
    Cały ruch idzie przez Fwój serwer, więc podgląd i zapis tcpdumpem.


  • 8. Data: 2022-11-06 22:04:49
    Temat: Re: pytanie bardziej informatyczne
    Od: sundayman <s...@p...onet.pl>

    W dniu 2022-11-06 o 12:05, Mirek pisze:
    > On 6.11.2022 12:01, Mirek wrote:
    >> On 6.11.2022 06:07, sundayman wrote:
    >
    > Dobra, chyba któryś serwer obciął, bo uznał to za niebezpieczne :)
    > generalnie chodziło mi o to:
    > https://notes.tweakblogs.net/blog/7955/using-netcat-
    to-build-a-simple-tcp-proxy-in-linux.html
    > Możesz to odpalić po prostu na serwerze, na którym masz shell-a.
    >

    dzięki za materiały, zaraz się zapoznam.


  • 9. Data: 2022-11-06 22:04:52
    Temat: Re: pytanie bardziej informatyczne
    Od: sundayman <s...@p...onet.pl>


    > czy wiesz jakiego VPN/ tunelu używa ten modem?
    > czy masz dostęp do konfiguracji czy nawet oprogramowania tego modemu?

    Do konfiguracji oczywiście tak, do firmware oczywiście nie.
    Komunikacja, z której korzystam jest po TCP.

    Jak wygląda autoryzacja samego modemu do serwera producenta nie wiem -
    od strony modemu to jest hasło oraz numer modemu.


    > Proxy (jakiekolwiek by to nie było) może nie zadziałać jeżeli producent
    > autentykuje / autoryzuje się po PKI

    Nie wydaje mi się, ale tego nie wiem.


    > Ale co właściwie chcesz osiągnąć?
    > Podgląd komunikacji?

    Chodzi raczej o kwestie "polityczne".
    Rzecz w tym, żeby "ukryć" adres oryginalnego serwera - z pewnych
    względów wolę, żeby był tam adres mój.

    Nie potrzebna mi żadna ingerencja ani żaden podgląd w tym momencie.



  • 10. Data: 2022-11-06 22:12:10
    Temat: Re: pytanie bardziej informatyczne
    Od: sundayman <s...@p...onet.pl>


    > czy wiesz jakiego VPN/ tunelu używa ten modem?

    A musi używać ?
    Jedne co mam to adres i port serwera.
    No i dostęp do systemu zarządzania na tymże serwerze, ale w tym
    konkretnym przypadku z mojego punku widzenia nic ten serwer nie robi -
    przesyła dane z jednego modemu do drugiego.

    Bo ten program na PC jest właściwie traktowany jako drugi modem.
    Zresztą to może być i fizycznie taki układ dwa modemy połączone ze sobą
    via GPRS<>internet.

    Czyli moją sytuacja jest schematycznie taka

    jeśli to są 2 modemy:
    RS232(modem)---GPRS---serwer---GPRS---(modem)RS232

    jeśli modem + PC:
    RS232(modem)---GPRS---serwer---(PC)RS232


    konfiguracyjnie się to niczym nie różni.
    W przypadku PC zamiast fizycznego modemy to mała aplikacja, której
    podaje się dokładnie te same parametry co modemowi ( adres serwer + port
    ) i ona udostępnia wirtualny COM port.


strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: