#1 2011-01-20 19:43:15

Dummas
Linux Rat
Iš: Vilnius
Užsiregistravo: 2010-10-10
Pranešimai: 177
Tinklapis

C su TCP ir char buffer ypatybė

Šiandien radau gan įdomų bug'ą ( gal greičiau TCP ypatybę ). Pasirodo, kai kažką siunti per TCP, jis praskipina '\0' ( string end )

Tarkim:

n = read ( client_socket, buffer, 255 );
popen ( buffer, "r" );

Praneš apie klaidą, jog "tuščios" komandos nėra. Realiai jin yra, tačiau be '\0' ir execl(), kuris yra popen(); funkcijoje neperduoda visko teisingai sh'ui;

: command not found

Sprendimas yra gan paprastas:

n = read ( client_socket, buffer, 255 );
buffer[n - 2] = '\0';
popen ( buffer, "r" );

Ir viskas kuo puikiausiai veikia.

Tam išsiaiškinti man prireikė viso ryto. Vis galvojau, kad ne tokio cont'o char array paduodu..

Gan ekonomiškas tas TCP. smile


Arch Linux Lietuva

Atsijungęs

#2 2011-01-23 02:48:03

adomas
Narys
Iš: Vokietija
Užsiregistravo: 2011-01-20
Pranešimai: 69

At: C su TCP ir char buffer ypatybė

Kažkaip man tas praskipinimas užbaigimo stringo keistai atrodo. Nepastikėjimą kelia.

Atsijungęs

#3 2011-01-23 13:23:43

Dummas
Linux Rat
Iš: Vilnius
Užsiregistravo: 2010-10-10
Pranešimai: 177
Tinklapis

At: C su TCP ir char buffer ypatybė

Na, viso to galima išvengti pasitelkus bibliotekas ( arba pačiam tokią parašyti ), tai to nepasitikėjimo galima išvengti. smile

Iš kitos pusės, tai per TCP yra siunčiamas ne tik char buffer, bet ir binariniai paketai, o jiems "\0" tikrai nėra reikalingas.

Šiaip, tai man galėjo nutikti ir dėl to, kad klientą prie serverio naudojau telnet'ą. Dabar rašysiu jau savo ir klientą, tai galėsiu pilnai valgyti siunčiamą informaciją.


Arch Linux Lietuva

Atsijungęs

#4 2011-01-28 19:22:43

Dummas
Linux Rat
Iš: Vilnius
Užsiregistravo: 2010-10-10
Pranešimai: 177
Tinklapis

At: C su TCP ir char buffer ypatybė

Taip, tai vyksta dėl to, kad naudojau telnet'ą. Dabar, kai kontroliuoju ką siunčiu - tokios problemos nebeliko. smile


Arch Linux Lietuva

Atsijungęs

#5 2011-05-31 16:36:19

s2
Narys
Užsiregistravo: 2011-05-31
Pranešimai: 9

At: C su TCP ir char buffer ypatybė

Gal jau laikas ir temos pavadinimą pakeist į racionalesnį, labiau atspindintį probleminę situaciją ; ) ?
Nes:
1, neegzistuoja ryšys tarp C ir TCP;
2, char buffer niekam nieko nesako (sako tiek pat, kiek ir "unsigned int buffer" -- C kalboje viskas yra ints;)
3, situacija susijusi ne su TCP steku, o su klientine Telnet programa.

Atsijungęs

Lentos poraštė