2017-10-30 14 views
0

パケットのTCPヘッダを解析していますが、nmapコマンドを使ってxmasスキャンを実行しているときにフラグが正しく表示されているかどうかを確認しようとしています:nmap -sX localhost、フラグが設定されていません。ここでTCP nmapで設定されていないフラグXmasスキャン

私はフラグをチェックするために使用していたコードです:

if(tcp_header->th_flags & TH_URG & TH_PUSH & TH_FIN) 
    xmasScans++; 

私はちょうど1つずつだけでなく個々のフラグをチェックするために、同様のプロセスをしています。

上記のコードはフラグのチェックに適していますか? ありがとう

+0

ちょうど私の$、0.02:一枚の紙の上に、しばらくの間、ビット演算子と遊んでみてください。本当にバイナリ数に対する各自の影響が正確であることに精通しています。 'TH_URG'、' TH_PUSH'などが何であるかを調べる(おそらく単に 'main'に値を表示するだけでも)、バイナリで何があるのか​​把握し、何が効いているのかをしばらく調べてください。 –

答えて

0

いいえ、これは正しくありません。 &のようなビット演算子は左結合されている、あなたはそれぞれの操作はそうと同じように、左から、括弧であるかのように扱うことができることを意味している:

(((tcp_header->th_flags & TH_URG) & TH_PUSH) & TH_FIN) 

のでフラグはURG +のPUSH +で0b00101001であったと想像しますFINと他に何もありません。最初の操作は次のとおりです。

00101001 
& 00100000 
= 00100000 

したがって、結果は単純にTH_URGです。そして、第2の動作はTH_URG & TH_PUSHと同等です:

00100000 
& 00001000 
= 00000000 

だから、結果が偽、0あり、条件は常にfalseとなります。代わりに、それぞれを個別にテストし、論理とそれらを結合する必要があります。

if (tcp_header->th_flags & TH_URG 
    && tcp_header->th_flags & TH_PUSH 
    && tcp_header->th_flags & TH_FIN) 
関連する問題