我正在尝试设计启动EAP-TLS握手的第一个数据包。这就是我的数据包当前的样子:
我通过手动用C填充相应信息的缓冲区设计的EAP部分。我使用OpenSSL导出的TLS部分如in this question所示。然后我转到RFC并在数据包中添加了4个八位字节长度字段和TLS标志。但wireshark拒绝接受它!我尝试逐字节地将TLS数据与通过TCP发生的TLS连接进行比较,我可以看到客户端hello(十六进制为16),TLS版本(0x0301:TLS 1.0)的字段顺序相同。你能帮我辨别我哪里出错吗?谢谢!此外,如果有人知道可以生成这些消息的客户端,那么我可以比较它们,这也是有益的。谢谢!
答案 0 :(得分:1)
您的802.1X标头表示数据包为227字节。突出显示199个字节,未突出显示28个字节,因此总计最多为227.好。
因此,如果您的整个数据包是227个字节,那么您的EAP标头肯定必须小于该字节。除了您的EAP标题外,EAP数据也是227字节。
您的EAP标题应如下所示:
+------+------+------------+------+----
| code | ID | length | type | data ...
+------+------+------------+------+----
1 byte 1 byte 2 bytes 1 byte n bytes
RFC2716说:
长度
The Length field is two octets and indicates the length of the EAP packet including the Code, Identifier, Length, Type, and Data fields. Octets outside the range of the Length field should be treated as Data Link Layer padding and should be ignored on reception.
因此,长度是从code
开始并到达数据包末尾的字节数,在本例中我认为是227 - 18 = 209
。
继续,我们看到消息类型是13,因此它是一个EAP-TLS数据包。我看到S
位未设置,这意味着该数据包是片段确认。那是对的吗? (可能不是,但只有你知道)
S位 (EAP-TLS启动)在EAP-TLS开始消息中设置。这个 区分EAP-TLS Start消息与片段 确认。
获取EAP-TLS长度,告诉我们消息的总长度,以防有效负载分布在多个数据包上。我们正在查看整个TLS消息的数据包吗?只有你知道你的信息有多长,以及信息的长度。
TLS消息长度
The TLS Message Length field is four octets, and is present only if the L bit is set. This field provides the total length of the TLS message or set of messages that is being fragmented.
我假设整个邮件是您突出显示的内容,因此其长度为199.
即使上面的一些细节对你的数据包是错误的,一般的想法是你的长度错了,也许标志也是错的。
资源:
http://www.netcraftsmen.net/resources/archived-articles/429-examining-8021x-and-eap.html