Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Jan Novotný

Stran: [1]
1
Vývoj / Re:Bind socketu na konkrétní síťovou kartu v C
« kdy: 07. 11. 2024, 08:04:43 »
Proč tam není bridge s jednou adresou? Pak se nemusí řešit takové nestandardní ohejbáky a asi by to i fungovalo  ;).
Dobrý den, zařízení a jeho hw konfigurace je bez nároku na změnu. Díky za pochopení.
Prosím odpovědi, které vedou k získání dat ze socketu.
Děkuji

2
Vývoj / Re:Bind socketu na konkrétní síťovou kartu v C
« kdy: 07. 11. 2024, 06:49:22 »
Podle tech IP jsou vsechny tri sitovky v jednom subnetu...? Neuvadite tedy masku site, ale i tak.
A ty pakety vam na sitovku 3 prichazeji? Co rika tcpdump?

Dobrý den, ano síťovky jsou všechny ve stejném subnetu, síť 192.168.1.0/24, oct: 255.255.255.0. První síťovka má nastavenou gateway. (v této situaci není rozhodující, server je ve stejném segmentu)
V tcpdump je vidět, že po nabindování na 3. síťovku, UDP provoz správně odejde 3. síťovkou a i se 3.síťovkou vrátí správně odpověď ze serveru.
Jenom recvfrom() ze socketu nic nezíská a do aplikace odpověď nedorazí.
Děkuji

3
Vývoj / Bind socketu na konkrétní síťovou kartu v C
« kdy: 06. 11. 2024, 22:05:00 »
Dobrý den,
prosím, potřebuji poradit, jak správně použít bind socketu na konkrétní síťovou kartu v linuxu.
Jde o tento případ: Linux se 3 síťovkami, default gateway je směrem za síťovkou 1. Adresa serveru 192.168.1.55.
Klientské síťovky 192.168.1.51, 192.168.1.52, 192.168.1.53.
Klient ve výchozím stavu odesílá / přijímá data v pořádku přes síťovku 1.
Odesílat / přijímat potřebuji přes síťovku 3 (enp0s8).
Musím tedy použít  bind to device.
setsockopt(udpSocket, SOL_SOCKET, SO_BINDTODEVICE, localEthDeviceName
Pokud nabinduji socket na enp0s8, je vidět v tcpdump, že klient data odešle přes síťovku 3 a také přijímá přes síťovku 3, ale nastává problém, že recvfrom() nezíská ze socketu žádná data a tedy odpověď do aplikace nedorazí.
Nevíte, čím to může být, proč recvfrom v případě bindu na síťovku žádná data nedostane?
Jak bych měl bind správně použít?

Kód jednoduchého UDP klienta přikládám níže.
Děkuju moc za radu.

Kód: [Vybrat]
#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <cerrno>


using namespace std;

int main(int argc, char** argv) {

#define MAXBUF 1024

int udpSocket, returnStatus, addrlen;
struct sockaddr_in udpClient, udpServer;
char buf[MAXBUF];
string message = getSendMessage();
string localEthDeviceName = "enp0s8";


/* create a socket */
if ((udpSocket = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
fprintf(stderr, "Could not create a socket!\n");
return(1);
}else{
printf("Socket created.\n");
}

if (setsockopt(udpSocket, SOL_SOCKET, SO_BINDTODEVICE, localEthDeviceName.c_str(), static_cast<socklen_t>(strlen(localEthDeviceName.c_str()))) == -1) {
    close(udpSocket);
    return 1;
}

/* client address */
string localIp = "192.168.1.51";
udpClient.sin_family = AF_INET;
udpClient.sin_addr.s_addr = inet_addr(localIp.c_str());
udpClient.sin_port = htons(5065);
returnStatus = bind(udpSocket, (struct sockaddr*)&udpClient, sizeof(udpClient));
if (returnStatus == 0) {
fprintf(stderr, "Bind completed!\n");
}
else {
fprintf(stderr, "Could not bind to address!\n");
close(udpSocket);
return(1);
}


/* server address */
string serverIp = "192.168.1.55";
udpServer.sin_family = AF_INET;
udpServer.sin_addr.s_addr = inet_addr(serverIp.c_str());
udpServer.sin_port = htons(5060);

returnStatus = static_cast<int>(sendto(udpSocket, message.c_str(), strlen(message.c_str()) + 1, 0, (struct sockaddr*)&udpServer, sizeof(udpServer)));
if (returnStatus == -1) {
fprintf(stderr, "Could not send message!\n");
}
else {
/* message sent: look for confirmation */
addrlen = sizeof(udpServer);
returnStatus = static_cast<int>(recvfrom(udpSocket, buf, MAXBUF, 0, (struct sockaddr*)&udpServer, reinterpret_cast<socklen_t*>(& addrlen)));
if (returnStatus <= 0) {
fprintf(stderr, "Didn't get any response: %s\n", strerror(errno));
}
else {
buf[returnStatus] = 0;
printf("Received: %s\n", buf);
}
}

return 0;
}

4
Sítě / Re:Nefunkční DHCP na oddělené VLAN
« kdy: 08. 08. 2024, 11:47:55 »
Ahoj,
na routeru v gateway pro VLAN16 musí být jistě nastavena dhcp releay směrem na dhcp server v síti 10.x.x.x.
Jinak router dhcp broadcasty z VLAN16 nebude pouštět dále.
Nejjednodušší je otestovat trasu např. z notesu, který zapojím postupně do Cisco switche na port s access vlan 16, zda si odchytím ip konfiguraci z požadovaného dhcp serveru. Jesli ip config nedostanu, pokračuju s testem na Dahua switchi a takto postupuji blíže k routeru, až najdu problém.
Jestli ip konfiguraci dostávám všude, kde mám, vezmu jedno APčko a testuju wifi spojení na odpovídající VLAN.
Nebude to tak těžké najít, ale chce tomu věnovat čas. Jestli není možné testovat v prac. době, vyhraď si čas mimoprac. dobu.
Jinak za mě tedy ta šňůra zapojení L2 prvků zni trochu jako z LAN party.
Co s problémy, pokud jedno zařízení po cestě vypadne?
Asi bych trochu poptřemýšlel o redundantní topologii atd.
Hodně štěstí.

5
Vývoj / Re:Zahešované heslo v connection stringu k PostgreSQL
« kdy: 23. 06. 2023, 12:31:11 »
A) Pro uložení hesla je potřeba použít obecnou transobfuskační tříklíčovou polymonádní funkci.
B) Použít mozek a princip Good-Enough

Je to malý interní program?
Heslo proženeš funkcí XOR a uložíš ho reversibilně, ale nečitelně.
(Lze zjistit třeba debugováním, což IMHO nikdo nebude dělat.)

Je to částečně program?
Schovej to za webovou službu chráněnou SSL a token.

Prostě si polož základní otázky typu:
- je potřeba z databáze i číst?
- jsou tam zcizitelné věci?
- nelze v DB vytvořit VIEW a přes web REST ho publikovat
- pokud potřebuješ zapisovat, nestačí jen odeslat data? Z CRUD jen to C?
- bude narušena CIA triáda?

Pro interní použití může být xorované heslo dostatečně dobré.
https://www.tutorialspoint.com/cryptography_with_python/cryptography_with_python_xor_process.htm

Interní tool pro pár lidí:  Xorované Heslo
Tool pro mnohem více lidí bez možnosti narušení CIA: https://pypi.org/project/aes-cipher/
Tool pro mnohem více lidí s možností narušení CIA: Uživatelské účty a přihlášení do databáze nebo SSO
Software: Webová služba s možností exportu dat
...

CPU děkuji za příspěvek, tohle je velmi použitelné a XOR v tomto případě bude postačovat.
Děkuji pěkně.  :)

6
Vývoj / Re:Zahešované heslo v connection stringu k PostgreSQL
« kdy: 23. 06. 2023, 12:29:51 »
Děkuji vám za zamyšlení se a podnětné názory.

7
Vývoj / Zahešované heslo v connection stringu k PostgreSQL
« kdy: 23. 06. 2023, 00:14:55 »
Ahoj,
prosím, potřeboval bych poradit, jak se řeší situace, kdy do prográmku v c++ potřebuju zkompilovat hardcoded heslo pro připojení k (postgresql) databázi.

S použitím předpřipravené knihovny pgxx definuji connection string:

Kód: [Vybrat]
std::string connectionString = "host='server_ip_address' port='5432' dbname='database_name' user='username' password='Secret_12345'";

Pokud prográmek zkompiluju, heslo jde z binárky přečíst a to je problém.
Existuje nějaký nástroj, který by uměl pracovat jenom s HASHem hesla v connection stringu namísto vepsaného hesla?

Nebo jakým způsobem se tohle správně provádí?
Děkuji za radu.

8
Ty bláho ... Já se tady asi nechytám v kontextu vlákna, o co tu jde.
Tak nějak si asi můžu myslet, že o jarňákách nemá pán co dělat a je potřeba si tu ve fóru pořádně zatrolit, přestože ví, co dělá.
(Je ale možné, že pán myslí připomínky vážně a tak tedy, jak už tu několikrát zaznělo, není nic jednoduššího, než vzít líbivou linux distribuci a nainstalovat ji ve virtualboxu v prostředí windows. Osahám si ji. Zjistím, že mi sedí prakticky, systémově, vizuálně atd. a není co řešit)

9
Ahoj,
prosím, neznáte tu někdo, jak správně používat přístup ke spouštění vláken z C++? (Windows Visual studio)
Kód níže funguje. Celý kód volám z main().
Problém, na který se potřebuju zeptat, je ten, že pokud nechám v kódu f-ci WaitForSingleObject a nechám aplikaci čekat na dokončení vlákna, aplikace po tu dobu zatuhne a čeká na vlákno.
Takto testem naspouštím např. 5 vláken a nechám je klidně počítat fibonacciho pro číslo 40. To si tedy počkám...
Prozatím spouštím kód jenom z cmd, ale chování z GUI by bylo identické.
Právě pro to jsem chtěl použít spouštění vláken a představoval jsem si, že aplikace v main() poběží dále a bude normálně reagovat na uživatelské vstupy.
Pokud už běží vlákna, aplikace nereaguje na uživatelský vstup.
Četl jsem, že f-ce WaitForSingleObject() se nemá vynechávat, že pak to prý není korektní ukončovací postup pro běžící vlákno.
Nebo se prostě vlákna nemají spouště z mainu?
Je na to nějaká finta?
Jak to udělat nejlépe?
Děkuji.

Kód: [Vybrat]
#include <process.h>
#include <Windows.h>

h = (HANDLE)_beginthreadex(0, 0, &doMyWork, &n, 0, &threadId);
threadsVector.push_back(threadId);
cout << "New thread spawned with child function. ThreadID: " << threadId << endl;
WaitForSingleObject(h, INFINITE);
if(CloseHandle(h)){
cout << "Thread finished and terminated." << endl;
}

10
Vývoj / Android - čistá NDK C++ aplikace s EGL a opengl
« kdy: 06. 03. 2020, 14:14:45 »
Dobrý den,
prosím máte někdo zkušennost s programováním v C++ pro android, s použitím native development kitu, EGL a OPENGL?
Bez Java jazyka.
Chtěl bych tohle vyzkoušet.
Potřeboval bych prosím jednoduchou srozumitelnou ukázku kódu, jak inicializovat EGL okno a v něm něco vykreslit.
Zejména pak eglCreateWindowSurface().
Pro testy zkouším v Android Studiu.
Děkuji za vstřícnost.

Stran: [1]