Python3でTCP通信でパケットが「ACK」なのか「PUSH ACK」なのか「SYN
ACｋ」なのかを判断したいと思っております。しかしなにをどの様に判定すれば良いのかが知りたいです。詳しい方居られましたら教えて頂きたく宜しくお願い致します。
CC BY-SA 4.0
2018-10-19T15:15:02.303
49465
2018-10-20T05:43:33.603
30329
question
python
TCPパケットについて
PythonでTCPを使う場合、通常はsocketを`socket.socket(socket.AF_INET,
socket.SOCK_STREAM)`で作成しますが、その場合は、TCPの接続処理を自動で行うため、`ACK`,`SYN`,`PSH`というフラグを設定・取得することはできません。

もし、フラグ`ACK`,`SYN`,`PSH`を設定・取得したい場合は、パラメータに`socket.SOCK_RAW`を設定してRAWソケットを使います。この場合は、TCPヘッダー及びIPヘッダーを自分で設定し取得することができます。

```

    s = socket.socket(socket.AF_INET, socket.SOCK_RAW)
    
```

なお、PSH(push)フラグは、オンにすると受信したデータを直ちにアプリケーションに引き渡すように要求するフラグですが、一般的にはオフの場合でもそのようにTCPが実装されているため、通常は使われていません。

本家stackoverflow: [How does TCP PSH
work?](https://stackoverflow.com/questions/13059323)
CC BY-SA 4.0
2018-10-20T01:18:20.170
49467
2018-10-20T05:43:33.603
2018-10-20T05:43:33.603
15171
15171
49465
answer