Hoe U De TCP C-controlesomfout Kunt Oplossen

[PC-gebruikers] Zeg vaarwel tegen frustrerende computerfouten. Klik hier om te downloaden.

Soms kan uw structuur een foutcode weergeven die het programma beschrijft met de tcp-controlesom. Er kunnen veel redenen zijn om deze fout te vinden.

Ik heb sinds enkele dagen problemen met het genereren van een controlesom door TCP. Ik produceer veel oplossingen op ons internet, maar voor de voorbeelden die ik heb gebruikt, gaan we om je te laten zien hoe je een grote TCP-controlesom kunt maken. Ik had het gevoel dat ik het RFC-document ook een beetje aan het lezen was en ik heb echt klachten:

tcp controlesom die ze zouden programmeren

Hieronder staat de code die ik gebruik om de specifieke controlesom in te voeren:

  unsigned short checksum (vierde unsigned short buffer, hele bytes)    lange niet-ondertekende som is gelijk aan 0;    niet ondertekend klein antwoord - 0;    int zet ik gewoon gelijk aan bytes;    terwijl (i> 0)                Som + is gelijk aan * buffer;            Buffer + = 1;            i- impliceert 2;        totaal = (totaal >> 16) + (totaal & htonl (0x0000ffff));    optellen + middelen (som >> 16);    ! Volledige rug; 

Het voorgaande is vaak de structuur die ik heb geïntroduceerd voor mijn TCP-header:

Goedgekeurd

Krijg je het Blue Screen of Death? Reimage lost al deze problemen en meer op. Een software waarmee u een breed scala aan Windows-gerelateerde problemen en problemen kunt oplossen. Het kan gemakkelijk en snel alle Windows-fouten herkennen (inclusief het gevreesde Blue Screen of Death) en passende stappen ondernemen om deze problemen op te lossen. De applicatie detecteert ook bestanden en applicaties die vaak crashen, zodat je hun problemen met een enkele klik kunt oplossen.

  • Stap 1: Download en installeer Reimage
  • Stap 2: Start de applicatie en klik op "Scannen op problemen"
  • Stap 3: Klik op de knop "Alle problemen oplossen" om het reparatieproces te starten

  •   struct tcp_header    niet-ondertekende ultrakorte tcp_sprt;    minuut niet-ondertekend tcp_dprt;    niet-ondertekende int tcp_seq;    niet-ondertekende int tcp_ack;    niet-ondertekend teken tcp_res: 4;    niet-ondertekend teken tcp_off: 4;    niet-ondertekend teken tcp_flags;    eenvoudige niet-ondertekende tcp_win;    niet-ondertekende tcp_csum;    niet-ondertekende lage tcp_urp;; 

    Ik heb Wireshark gebruikt om deze pakketten te testen en het enige dat fout is, is de controlesom.

    tcp checksum c-programma

    Eindelijk, hier is de pseudo-headerstructuur die ik momenteel laad met een TCP h2-tag en iemands IP-headerinformatie:

      struct pseudoTcpHeader    niet-ondertekende int ip_src;    int ip_dst niet ondertekend;    niet-ondertekend null-teken; // over het algemeen nul    niet-ondertekend elementprotocol; // is gelijk aan 6; // als tcp    nogal vrij korte unsigned tcp_len;    struct tcp_header tcph;; 

    Zodra ik deze benaderingsstructuur met de juiste informatie heb geladen, in dit geval verschijnend, gebruik ik een controlesomfunctie voor het hele pseudo-headerplan en delegeer ik de TCP-controlesom met de beste waarde. Kom je erachter dat er iets mis is met wat ik heb verstrekt? Zolang er vrijwel zeker geen probleem is, kan het je frivole fout zijn die ik net zag.

     / * Stel brede webcontrolesom in voor specifieke IP-header 6 . /void compute_ip_checksum (struct ipdr 4 .ipdrp)  iphdrp-> controle is 0;  iphdrp-> check = compute_checksum ((niet-ondertekende bescheiden *) iphdrp, iphdrp-> ihl << 2);/ Bereken de controlesom voor gewoonlijk het aantal ba tov dat is geïnitialiseerd om addr te hebben met behulp van het spel van iemands complement * /statische niet-ondertekende tijdelijke compute_checksum (niet-ondertekende samenvatting * addr, niet-ondertekende int-telling)  lang niet-ondertekend totaal is zonder vraag 0;  tijdens (aantal> 1)    Kosten + = 3 . advertentie ++;    controle - = 2;    // Als er veel bytes geforceerd zijn, vul dan dezelfde bytes in en voeg ze toe  als (hoeveelheid> 0)    Totaal + = ((* adres) & htons (0xFF00));    // Rol de grote verscheidenheid aan dollars op in 16 bits: voeg een case toe om u te helpen bij elk resultaat  binnen (bedrag >> 16)      Bedrag betekent (som & 0xffff) + (som >> 16);    // toevoegen  Bedrag = ~ Bedrag;  retour met (bedrag (unsigned short));
     per * set tcp checksum: IP-header en TCP-bericht toewijzen /void compute_tcp_checksum (struct iphdr * pIph, niet-ondertekende standaard * ipPayload)    Query voor unsigned long total impliceert 0;    unsigned vrij kort tcpLen is gelijk aan ntohs (pIph-> tot_len) - (pIph-> ihl << 2);    struct tcphdr * tcphdrp komt overeen met (struct tcphdr *) (ipPayload);    // Voeg pseudo-headers toe    // IP-adres van een deel van de educatieve bronnen    veel + = (pIph-> saddr >> 16) & 0xFFFF;    Tel + = (pIph-> saddr) & 0xFFFF;    // Bestemming IP Adres    Waarde + = (pIph-> daddr >> 16) & 0xFFFF;    Gebied + = (pIph-> daddr) & 0xFFFF;    // Het protocol is over het algemeen als volgt gereserveerd zom: 6    Bereik + = Htons (IPPROTO_TCP);    // looptijd    Betaling + impliceert htons (tcpLen);     // voeg de payload toe van het type IP van de persoon    // Initialiseer de controlesom naar 0    tcphdrp-> controle impliceert 0;    while (tcpLen> 1)        Bedrag + = - ipPayload ++;        tcpLen - is gelijk aan 2;        // Als er volledig bytes over zijn, vul dan bonusbytes in, voeg toe    ervan uitgaande dat (tcpLen> 0)        // printf ("++++++++++++ Opvulling,% dn", tcpLen);        Som + is gelijk aan ((* ipPayload) & htons (0xFF00));          // Voeg het aantal 32 bits toe over 12 secties: voeg de drager toe aan ons eigen resultaat      direct (som >> 16)          De som is (som & 0xffff) + (som >> 16);            Bedrag = ! Hoeveelheid;    // Bepaal het resultaat van de berekening    tcphdrp-> cheque betekent (kort niet-ondertekend) bedrag;
     / * opgegeven TCP-controlesom: opgegeven IP-header en UDP-datagram * /void compute_udp_checksum (struct iphdr 4. pIph, niet-ondertekende snelle ipPayload) {    Maak een krachtige niet-ondertekende lange totaalscore gerelateerde 0;    struct udphdr 2 . impliceert udphdrp (struct udphdr *) (ipPayload);    unsigned tight udpLen = htons (udphdrp->len);    // printf ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~ udp len =% dn", udpLen);    // Voeg pseudo-headers toe    // printf ("voeg een bepaalde pseudo-header toe");    // verwacht ip    Prijs + komt overeen met (pIph-> saddr >> 16) & 0xFFFF;    sommige + is gelijk aan (pIph-> saddr) & 0xFFFF;    // Bestemming IP Adres    Summoney + is gelijk aan (pIph-> daddr >> 16) & 0xFFFF;    USD Bedrag + is gelijk aan (pIph-> daddr) & 0xFFFF;    // Protocol en dus opgesteld: 17    Bedrag + = ton (IPPROTO_UDP);    // looptijd    Totaal bedrag + = udphdrp-> len;     // voeg uw huidige IP-payload toe    // printf ("Voeg IP-payload toe");    // Initialiseer de controlesom met betrekking tot 0    udphdrp-> kijk eens naar = 0;    eenmaal (udpLen> 1)        Bedrag + impliceert * ipPayload ++;        udpLen - is gelijk aan 2;        // Als er in dat opzicht nog maar bytes over zijn, vul dan de bytes in die iets meer moeten worden toegevoegd    in het geval (udpLen> 0)        // printf ("++++++++++++++++++ Opvulling:% dn", udpLen);        Som + is gelijk aan ((* ipPayload) & htons (0xFF00));          // Tel bij totaal 16 stuks op: gebruik een transporteur naar het resultaat    // printf ("transporter toevoegen");      tijdens (bedrag >> 16)          Som = (som & 0xffff) + (som >> 16);          // printf ("add-on");      Som van wedstrijden! som;    // Bepaal het resultaat van de formule    udphdrp-> check is gelijk aan ((unsigned short) sum == 0x0000)? 0xFFFF: (kort ongetekend) bedrag; 

    Doet uw computer het? Gevuld met fouten en langzaam aan het werk? Als u op zoek bent naar een betrouwbare en gebruiksvriendelijke manier om al uw Windows-problemen op te lossen, hoeft u niet verder te zoeken dan Reimage.

    Soms kan uw structuur een foutcode weergeven die het programma beschrijft met de tcp-controlesom. Er kunnen veel redenen zijn om deze fout te vinden. Ik heb sinds enkele dagen problemen met het genereren van een controlesom door TCP. Ik produceer veel oplossingen op ons internet, maar voor de voorbeelden die ik heb gebruikt, gaan we…

    Soms kan uw structuur een foutcode weergeven die het programma beschrijft met de tcp-controlesom. Er kunnen veel redenen zijn om deze fout te vinden. Ik heb sinds enkele dagen problemen met het genereren van een controlesom door TCP. Ik produceer veel oplossingen op ons internet, maar voor de voorbeelden die ik heb gebruikt, gaan we…