abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 23:55 | Zajímavý článek

Nakladatelství Raspberry Pi vydalo 244 stránkového průvodce pro úplné začátečníky s jednodeskovým počítačem Raspberry Pi The Official Raspberry Pi Beginner’s Guide (pdf). Programování ve visuálním programovacím jazyce Scratch je věnována nová příručka Code Club Book of Scratch Volume 1 (pdf). Vydáno bylo také třetí číslo časopisu věnovaného počítačovým hrám Wireframe (pdf).

Ladislav Hagara | Komentářů: 0
včera 23:44 | Nová verze

U příležitosti oslav jednoho roku prací na debianím balíčku, vyšlo GPXSee 7.0. Nová verze přináší zejména podporu vektorových map (Mapbox PBF) pomocí nově vzniklého Qt pluginu.

Martin Tůma | Komentářů: 1
7.12. 23:33 | Nová verze

UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch (seznam podporovaných zařízení), oznámila vydání nové verze Ubuntu Touch OTA-6. Zdůrazněna jsou například vylepšení webového prohlížeče Morph.

Ladislav Hagara | Komentářů: 0
7.12. 21:33 | Komunita

Richard Hughes na svém blogu informuje, že se společnost AMI (American Megatrends Incorporated), největší dodavatel firmwarů a BIOSů (AMIBIOS, Aptio, ...), zapojila do projektu LVFS (Linux Vendor Firmware Service). Seznam projektem podporovaných zařízení by se měl tedy časem rozšířit.

Ladislav Hagara | Komentářů: 0
7.12. 20:11 | Komunita

Nadace pro svobodný software (FSF) informuje, že seznam doporučených svobodných distribucí GNU/Linuxu byl rozšířen o distribuci Hyperbola GNU/Linux-libre. Hyperbola vychází z Arch Linuxu a na rozdíl od něj splňuje požadovaná kritéria.

Ladislav Hagara | Komentářů: 6
7.12. 19:55 | IT novinky

Společnost Valve oznámila, že počítačová hra Counter-Strike: Global Offensive (Steam) je nově free to play. Hra Company of Heroes 2 (Steam) je do pondělí 10. prosince zdarma.

Ladislav Hagara | Komentářů: 0
7.12. 00:11 | Nová verze

Byla vydána verze 7.3.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.3. Podrobný přehled novinek v seznamu změn.

Ladislav Hagara | Komentářů: 3
6.12. 23:55 | Nová verze

Byla vydána verze 1.31 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

Ladislav Hagara | Komentářů: 0
6.12. 23:40 | Zajímavý článek

V roce 2015 Microsoft s Windows 10 představil i jeho nový prohlížeč Edge, který používal a používá nový engine EdgeHTML. Před pár dny se začaly objevovat zprávy o přechodu na Chromium engine. Nyní Microsoft vydal oficiální vyjádření, kde skutečně potvrdil přechod na Chromium projekt.

Max | Komentářů: 30
6.12. 23:22 | Nová verze

Po 5 měsících vývoje od vydání verze 0.15.0 byla vydána nová verze 0.16.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 95 vývojářů. Přibylo 985 nových balíčků. Jejich aktuální počet je 8 723 . Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 0
Chystáte se přejít na Wayland na „desktopu“?
 (25%)
 (6%)
 (11%)
 (32%)
 (25%)
Celkem 96 hlasů
 Komentářů: 14, poslední dnes 12:19
Rozcestník

Dotaz: Jak TCP tester v C, který neposílá FIN,ACK?

17.9.2017 22:12 tcptester
Jak TCP tester v C, který neposílá FIN,ACK?
Přečteno: 746×
Ahoj. Chci vyzkoušet nějaké věci na serveru a potřebuji, aby klient navázal spojení na konkrétním zdrojovém a cílovém TCP portu, ale aby pak neodesílal FIN,ACK. Chci jen vytvořit spojení a ukončit program, aniž by spojení ukončoval. Nicméně zdá se, že ačkoliv nemám close a i když donutím program k segfaultu, vždy se FIN, ACK odešle. Proč a jak to obejít?

Kód:
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>

    #define PORT 80    /* the port client will be connecting to */

    #define MAXDATASIZE 100 /* max number of bytes we can get at once */

    int main(int argc, char *argv[])
    {
        int sockfd, numbytes;  
        char buf[MAXDATASIZE];
        struct hostent *he;
	struct sockaddr_in my_addr;
        struct sockaddr_in their_addr; /* connector's address information */

        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
            perror("socket");
            exit(1);
        }
	
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(5557);
	my_addr.sin_addr.s_addr = inet_addr("192.168.1.42");
	bzero(&(my_addr.sin_zero), 8);     /* zero the rest of the struct */
	
	if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
		perror("BIND ERROR");
		exit(1);
	}
   

        their_addr.sin_family = AF_INET;      /* host byte order */
        their_addr.sin_port = htons(PORT);    /* short, network byte order */
	their_addr.sin_addr.s_addr = inet_addr("1.2.3.4");
        bzero(&(their_addr.sin_zero), 8);     /* zero the rest of the struct */

        if (connect(sockfd, (struct sockaddr *)&their_addr, \
                                              sizeof(struct sockaddr)) == -1) {
            perror("connect");
            exit(1);
        }

	sleep(5);
	
	char *str = "Foo"; // Compiler marks the constant string as read-only
	*str = 'b'; // Which means this is illegal and results in a segfault

        return 0;
    }

Odpovědi

17.9.2017 22:43 alexfa | skóre: 7
Rozbalit Rozbalit vše Re: Jak TCP tester v C, který neposílá FIN,ACK?
Takhle nejde :-)

TCP v AF_INET/SOCK_STREAM spravuje jadro, a to zajisti, ze i po nespravnem ukonceni procesu dojde ke spravnemu ukonceni TCP spojeni skrze signalizaci RST a FIN (a spoustu dalsich veci). Pokud toto chcete udelat z userspace (tzn. z uzivatelskeho procesu), tak musite pouzit raw sockety ... ale to znamena take vytvaret 'plnohodnotne' IP packety a mit rootovska prava (ci ekvivalent).

https://www.systutorials.com/docs/linux/man/7-raw/

Ales Teska | Twitter: @alesteska | TeskaLabs | GitHub
Jendа avatar 17.9.2017 22:43 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Jak TCP tester v C, který neposílá FIN,ACK?
To za tebe dělá kernel, když po programu uklízí - lhostejno jestli protože skončil „správně“ nebo smrtelným signálem.

Potřebuješ raw sockets.
Bojíte se, že když umřete, nebudete nikomu chybět? Pište kód bez komentářů a dělejte nedokumentované změny!
17.9.2017 22:44 NN
Rozbalit Rozbalit vše Re: Jak TCP tester v C, který neposílá FIN,ACK?
Nestacil by jen syn scan?
17.9.2017 23:01 tcptester
Rozbalit Rozbalit vše Re: Jak TCP tester v C, který neposílá FIN,ACK?
Toho jsem se bál, že v tom bude mít prsty jádro. SYN scan nestačí a do raw socketu se mi moc jít nechce. Asi to nahodím ve virtuálce a prostě tomu odpojím síťovku. Předpokládám, že bez raw socketu to elegantněji nejde, že?
18.9.2017 09:08 graviton
Rozbalit Rozbalit vše Re: Jak TCP tester v C, který neposílá FIN,ACK?
Hmm, urcite jde v iptablesach vyjadrit aby na outputu zahazovaly pakety s kombinaci flagu fin+ack. Nemam momentalne jak to zkusit, ale nevidim duvod, proc by to nemelo fungovat...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.