设计EAP-TLS客户端问候消息

我正在尝试设计启动EAP-TLS握手的第一个数据包。 这就是我的数据包当前的样子:

在此处输入图像描述

我通过在C中手动填充具有相应信息的缓冲区来设计EAP部分。 我使用OpenSSL派生的TLS部分,如本问题所示。 然后我去了RFC并在数据包中添加了4个八位字节长度字段和TLS标志。 但wireshark拒绝接受它! 我尝试逐字节地将TLS数据与通过TCP发生的TLS连接进行比较,我可以看到客户端hello(hex为16),TLS版本(0x0301:TLS 1.0)的字段顺序相同。 你能帮我辨别我哪里出错吗? 谢谢! 此外,如果有人知道一个客户端可以生成这些消息,所以我可以比较它们,这也是有益的。 谢谢!

您的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

http://www.ietf.org/rfc/rfc2716.txt