質問

私はパケットスニファを作成するためのpcapを使用しています。
私はこのTCP構造を有するます:

typedef struct TSP_header{  
  unsigned short int   sport;  
  unsigned short int   dport;  
  unsigned int         seqnum;  
  unsigned int         acknum;  
  unsigned char        reserved:4, offset:4;  
  unsigned int
    tcp_res1:4,       //little-endian  
    tcph_hlen:4,      //length of tcp header in 32-bit words  
    tcph_fin:1,       //Finish flag "fin"  
    tcph_syn:1,       //Synchronize sequence numbers to start a   connection
    tcph_rst:1,       //Reset flag   
    tcph_psh:1,       //Push, sends data to the application  
    tcph_ack:1,       //acknowledge  
    tcph_urg:1,       //urgent pointer  
    tcph_res2:2;
  unsigned short int tcph_win;  
  unsigned short int tcph_chksum;  
  unsigned short int tcph_urgptr;  
}TSP_header;    

どのように私は、シーケンス番号を印刷することができますか?
私はhtons(SEQUENCE_NUMBER)を使用する必要があります?それはこのように動作していないので!

私の他の質問は、変数宣言の後に番号が何ですか?
4はtcph_hlenにどういう意味:4

役に立ちましたか?

解決

プログラミング言語はCです。

の場合は、フィールドのサイズを指定していないので、あなたの構造体が間違っている注意してください。例えば、シーケンス番号は32ビット、「INT」が16または64ビットであってもよいです。 SEQNUMのために、あなたはのuint32_t使用する必要があります。

あなたがネットワークからTCPパケットを読んだことがある場合は、

これは言われて、シーケンス番号は、ネットワーク順(ビッグエンディアン)であり、したがって、それを印刷するには、(ホストするネットワーク - ロング)ntohlを呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top