2016-07-12 6 views
0

私はgithubでこのコードを見ました。 私はpacket.payload.proto == 17がUDPでpacket.payload.proto == 6のTCPである理由を理解していません。なぜscapy packet.payload.proto == 17はUDPで、packet.payload.proto == 6 TCPですか?

パケット=パケット内のパケットのscapy.all.rdpcap( 'データ/ dns.cap')

: プリント( '----------') プリント( 'src_mac :{0}」形式(packet.src)) プリント。( 'dst_mac:{0}' 形式(packet.dst))

ip = packet.payload 
print('src_ip: {0}'.format(ip.src)) 
print('dst_ip: {0}'.format(ip.dst)) 

if ip.proto == 17: 
    udp = ip.payload 
    print('udp_sport: {0}'.format(udp.sport)) 
    print('udp_dport: {0}'.format(udp.dport)) 

if ip.proto == 6: 
    tcp = ip.payload 
    print('tcp_sport: {0}'.format(tcp.sport)) 
    print('tcp_dport: {0}'.format(tcp.dport)) 

print('----------\n') 

答えて

3

the IANA says soので。

... 
6  TCP  Transmission Control  [RFC793] 
... 
17 UDP  User Datagram    [RFC768][Jon_Postel] 
... 
+0

packet.payloadとは何ですか? –

+0

パケットのペイロード以外は? –

+0

私はペイロードが何であるか理解していません!説明できますか? –

2

イグナシオが提供する答えが正解です。 RFCとIANAはこれらの値を指定します。

ペイロードは、あなたが話しているパケット(PDUより具体的には)レイヤーに関連しています。

は、次の例を見てみましょう:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| IP   | TCP  | HTTP       | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

HTTPはTCPのペイロード、および(TCP + HTTP)であるIPのペイロードです。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| IP   | TCP  | Payload      | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
| IP   | Payload          | 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

https://en.wikipedia.org/wiki/IPv4#Header IPヘッダのレイアウトを示しています。プロトコルはこれらのフィールドの1つです。プロトコル(ip.proto)が6の場合、RFCごとにIPトラフィックのペイロードがTCPになります。 17の場合、ペイロードはUDPです。

一部のプロトコル(IPなど)には、その子ペイロードのタイプを列挙するフィールドがあります。他はしません。

+0

コメントありがとうございます! –

関連する問題