Calculer la taille et le début des données du paquet TCP (à l'exclusion de l'en-tête))

Comment dois-je calculer la taille et le byte de départ des données dans un paquet tcp (à l'exclusion des informations d'en-tête) ?

16
tcp
demandé sur paradox 2011-07-10 11:15:52

3 réponses

je vais supposer que vous avez affaire à un paquet TCP/IP. Vous aurez besoin de calculer cette taille vous.

en-tête IP a un champ' Total Length ' qui vous donne la longueur du paquet IP entier en octets. Si vous soustrayez le nombre de mots de 32 bits qui composent l'en-tête (donné par le champ de longueur de L'en-tête dans l'en-tête IP), vous connaîtrez la taille du paquet TCP. Habituellement, l'en-tête est de 20 octets pour le paquet IP, à moins que les Options ne soient présent.

Dans le en-tête TCP, le champ data Offset spécifie la taille de l'en-tête TCP en mots de 32 bits. Encore une fois, vous pouvez soustraire le nombre (multiplié par 4 pour vous donner le nombre d'octets dans l'en-tête) de la taille du paquet TCP que vous avez calculé plus tôt pour vous donner la taille des données dans le paquet TCP.

étant donné la longueur de L'en-tête dans l'en-tête IP et le décalage des données dans L'en-tête TCP, vous pouvez ajouter ces deux et multiplier par 4 pour vous donner offset byte jusqu'à ce que les données dans le paquet TCP commencent.

21
répondu vinod 2011-07-10 07:31:44

je viens de capturer un paquet TCP sur mon routeur, puis j'ai calculé la longueur des données TCP.

IHL = 5
Total Length = 0x00a8
Data Offset = 8
---------------------
0x00a8 - (5 + 8) * 4 = 116 bytes

# tcpdump -n -i br-lan -c 1 -e -XX tcp port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br-lan, link-type EN10MB (Ethernet), capture size 65535 bytes
15:33:53.917593 ae:ca:87:aa:aa:aa > b8:e8:56:bb:bb:bb, ethertype IPv4 (0x0800), length 182: 192.168.31.1.22 > 192.168.31.102.54076: Flags [P.], seq 582717816:582717932, ack 442380252, win 4706, options [nop,nop,TS val 100656432 ecr 1139948861], length 116
    0x0000:  b8e8 56bb bbbb aeca 87aa aaaa 0800 4510  ..V........x..E.
                                                 ^
    0x0010:  00a8 8d0c 4000 4006 ed7b c0a8 1f01 c0a8  ....@.@..{......
             ^^^^
    0x0020:  1f66 0016 d33c 22bb 9178 1a5e 2fdc 8018  .f...<"..x.^/...
                                                ^
    0x0030:  1262 c052 0000 0101 080a 05ff e530 43f2  .b.R.........0C.
    0x0040:  3d3d f6e4 f672 736f 6c6c 191f 64ec 80a6  ==...rsoll..d...
    0x0050:  ba74 e8f7 b2ce 99ec 2725 2d49 f4f6 7760  .t......'%-I..w`
    0x0060:  c83f 5130 83bb ca22 c32c 6251 7381 08e2  .?Q0...".,bQs...
    0x0070:  c036 1c12 f22f fe8b c36a eeff c95c 36fa  .6.../...j....
    0x0080:  7baa 810b 4c75 8ccf 19e4 62df 2c2c c5fd  {...Lu....b.,,..
    0x0090:  a0c8 aa53 1130 d413 7097 f1cd 34dc 92b7  ...S.0..p...4...
    0x00a0:  ea9b 3bd6 02f8 ea93 c8f3 7d32 4a58 39aa  ..;.......}2JX9.
    0x00b0:  12d3 e2bd 18d4                           ......

Toute la trame ethernet

en-tête IP (IHL / Longueur totale)

0                   1                   2                   3   
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|**IHL**|Type of Service|**********Total Length*********|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    | <-- optional
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            DATA ...                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

en-tête TCP (Data Offset)

0                   1                   2                   3   
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |       |C|E|U|A|P|R|S|F|                               |
| Offset|  Res. |W|C|R|C|S|S|Y|I|            Window             | 
| ******|       |R|E|G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2
répondu kev 2016-09-29 08:06:03

je me demande juste si votre question fait référence à un niveau plus élevé que le tcp/ip actuel. Habituellement, nous n'avons pas tendance à penser à tcp/ip lui-même en termes de paquets à un niveau plus élevé parce que ce que vous traitez est en fait un "flux" d'octets. Donc ce qui se passe c'est que vous créez un protocole (ou utilisez un protocole existant, bien sûr) où vous invoquez le recevoir appel api pour recevoir un en-tête et les données, de sorte que vous savez exactement quelle est la taille de l'en-tête et où vos données commencent.

-4
répondu crisbia 2011-07-10 07:41:00