мне нужно посылать данные через промежуточный сервер, на конечном сервере нужно узнать айпи источника(Client31).
Client31 -> PortMappedSrv -> Server23
взял исходник отсюда https://raw.githubusercontent.com/rssnsj/portfwd/master/src/tcpfwd.c
внёс изменения
+struct PrxData {
- int32_t IPProxy;
- int32_t IPSrc;
- int64_t Control; +}; io_state = handle_server_connecting(conn, efd); break; case S_SERVER_CONNECTED:
-
{
-
struct PrxData fstpckt;
-
fstpckt.IPProxy = rand();
-
fstpckt.IPSrc = conn->cli_addr.in.sin_addr.s_addr;
-
fstpckt.Control = fstpckt.IPProxy + fstpckt.IPSrc;
-
send(conn->svr_sock, &fstpckt, sizeof fstpckt, 0); io_state = handle_server_connected(conn, efd); break;
-
} default: syslog(LOG_ERR, "*** Undefined state: %d", conn->state); conn->state = S_CLOSING;
чтобы tcpfwd добивал первым пакетом структуру с рандомным айпи + айпи клиента, а Control это как контрольная сумма для проверки пакета на сервере. может кто-нибудь посмотреть, насколько адекватно встроил код. Всё работает, но боюсь что при нагрузке вылезет что я не в том месте посылаю этот первый пакет.