Chinaunix

标题: 急!求ASN.1(标准的数据描述语言)相关知识 [打印本页]

作者: play123456    时间: 2005-01-28 09:18
标题: 急!求ASN.1(标准的数据描述语言)相关知识
遇到一份台湾话单协议格式是用这种语言描述的,不知道如何解码。在网上查到资料极少。如下:
http://fanqiang.chinaunix.net/a3/b5/20010525/150710.html
http://www.ctiforum.com/standard/standard/asn.1/asn1/asn1.htm
http://www.ctiforum.com/standard/standard/asn.1/asn/asn2.htm

    大概讲一下什么是ASN.1:
ASN.1 (Abstract Syntax Notation One) 是一种用于描述结构化客体的结构和内容的语言。它原来是作为X.409的一部分而开发的,后来才自己独立成为一个标准。ASN.1在OSI的ISO 8824/ITU X.208(说明语法)和ISO 8825/ITU X.209(说明基本编码规则)规范。它被广泛用于通讯协议说明书中。

    请教高手对这种数据如何进行解码?
作者: albcamus    时间: 2005-01-28 09:21
标题: 急!求ASN.1(标准的数据描述语言)相关知识
agentX,pdu都跟它有关吧?我前一阵子在http://www.faqs.org/rfcs/rfcsearch.html
查过不少资料,后来改方法了也就不了了之。
作者: fieryfox    时间: 2005-01-28 10:11
标题: 急!求ASN.1(标准的数据描述语言)相关知识
看snmp++、net-snmp等的源代码。
作者: lenovo    时间: 2005-01-28 10:15
标题: 急!求ASN.1(标准的数据描述语言)相关知识
[quote]原帖由 "fieryfox"]看snmp++、net-snmp等的源代码。[/quote 发表:


对,snmp++里面有一个类是对asn.1进行编码和解码的,
你可以参考一下。只不过是c++写的。
作者: dave-2004    时间: 2005-01-28 13:49
标题: 急!求ASN.1(标准的数据描述语言)相关知识
网上流传有很多 ASN.1 编码解码的 CODE 啊。
关于他的标准,你可以搜索一下有个叫做 asn.1 complete
的 e-book, 很详细的说明了 ber, per 等编解码方式。

你还可以找一下 h.323 的实现, asn.1 在里面用得很广泛。
H.225, h.245, h.450.x q931 之类的都是由 asn.1 描述的。
作者: play123456    时间: 2005-01-31 11:36
标题: 急!求ASN.1(标准的数据描述语言)相关知识
到大家说的地方看看,继续学习中...
看了不少文档,还是有些摸不着头脑。
ASN差不多只是对数据结构和编码方式的描述,是不是有某种算法对所有使用ASN完成的数据都能解码呢?
作者: play123456    时间: 2005-01-31 12:36
标题: 急!求ASN.1(标准的数据描述语言)相关知识
在http://www.infosecurity.org.cn论坛上找到两本书,一本是原版英文,一个是中文版。附在这里。
无法上传,文件名放在这里吧:
asn1_layman_guide.pdf
ASN1 BER DER 编码子集入门指南.pdf
作者: crackpot    时间: 2005-01-31 14:35
标题: 急!求ASN.1(标准的数据描述语言)相关知识
首先ASN.1一般都是描述的某种协议的传输数据结构。它的好处是无二意性。不知道你们光是用来描述,还是底层用编码成ASN.1来传输。
一般用ASN。1写出协议的数据结构,然后生成C语言的数据结构,通信双方使用一致的协议文件就能通过编解码程序来进行通信了。

如果你那个协议简单的话,你可以自己写一个大的数据结构对应。如果和底层通信相关那就要知道是BER编码还是DER编码,编码不同数据包长度不同。
作者: soloarrow    时间: 2005-01-31 15:04
标题: 急!求ASN.1(标准的数据描述语言)相关知识
可以参照asn.1的标准文档说明。不知道你所的话单是否是交换机话单,如果是,那么在话单说明文档的开头应该列出了相关的参考文档说明,要稍微留心一下。
通常ASN.1标准的格式是(只能算简单的提示):tag+length+context.
tag是由一定的算法生成,这个通常是固定的,文档中会列出,不需要多费心;
length通常变化不到,区分一下长度是一个字节,还是多个字节,正常情况下长度是一个字节就够用了(在话单中),所以很多程序中考虑不周全,没有处理多个字节。
context根据文档中的说明进行解析即可。
作者: play123456    时间: 2005-01-31 15:34
标题: 急!求ASN.1(标准的数据描述语言)相关知识
to crackpot :
    我只需要将数据解读出来即可。你说“一般用ASN。1写出协议的数据结构,然后生成C语言的数据结构”,有这样的程序吗?从何处入手?我们使用的正是C语言。协议非常复杂,全英文的,一百七八十页呢。为了这个我看了将近500页书了,还是似懂非懂。能否给个例子点播一下?谢谢!
作者: play123456    时间: 2005-01-31 15:39
标题: 急!求ASN.1(标准的数据描述语言)相关知识
这是另外一本关于ASN的书:
ASN.1 COMPLETE
http://www.cybernumen.com.cn/cn/download/ASN.1.PDF
作者: crackpot    时间: 2005-02-04 11:05
标题: 急!求ASN.1(标准的数据描述语言)相关知识
你说的协议如果标准的话,会有专门的ASN.1的描述部分
就像下面的东东(我们项目的一个信息体的ASN.1结构描述):
  1. InformationObject ::= CHOICE {
  2.                   ipm [0] IPM,
  3.                   ipn [1] IPN
  4.                   }
  5. -- IPM

  6. IPM ::= SEQUENCE {
  7.     heading                                 Heading,
  8.     body                                Body
  9.     }

  10. -- Heading

  11. Heading ::= SET {
  12.         this-IPM                        ThisIPMField,
  13.         originator                [0]        OriginatorField OPTIONAL,
  14.         authorizing-users        [1]        AuthorizingUsersField OPTIONAL,
  15.         primary-recipients        [2]        PrimaryRecipientsField DEFAULT {},
  16.         copy-recipients                [3]        CopyRecipientsField OPTIONAL,
  17.         blind-copy-recipients        [4]        BlindCopyRecipientsField OPTIONAL,
  18.         replied-to-IPM                [5]        RepliedToIPMField OPTIONAL,
  19.         obsoleted-IPMs                [6]        ObsoletedIPMsField DEFAULT {},
  20.         related-IPMs                [7]        RelatedIPMsField DEFAULT {},
  21.         subject                        [8]        EXPLICIT SubjectField OPTIONAL,
  22.         expiry-time                [9]        ExpiryTimeField OPTIONAL,
  23.         reply-time                [10]        ReplyTimeField OPTIONAL,
  24.         reply-recipients        [11]        ReplyRecipientsField OPTIONAL,
  25.         importance                [12]        ImportanceField DEFAULT normal,
  26.         sensitivity                [13]        SensitivityField OPTIONAL,
  27.         auto-forwarded                [14]        AutoForwardedField DEFAULT FALSE,
  28.         extensions                [15]        ExtensionsField DEFAULT {}
  29.         }
复制代码

你按照这些描述,写出结构,只要协议标准,你写的也没有错,你从底层得到的数据就应该和这个对应。
得到底层的数据,需要知道你底层传输数据的ASN.1编码方式,根据你的编码方式将纯数据从ASN.1中解出来,这个好做,你看看ASN.1的协议就行。
得到解码后的数据,就需要和你的数据结构对应了,这个工作量是很大的。
要省事的话,去买专业的编解码程序,好像有个ASNC的公司做这个。有了这个编解码的程序,可以自动把ASN.1的描述文件变成C描述程序,和你的其他程序合在一起就行了。好像开源的也有,找找看。
我们自己写了一套,不过是公司的,不能发布,呵呵抱歉了。
作者: wuleisky    时间: 2007-05-24 11:09
原帖由 play123456 于 2005-1-28 09:18 发表
遇到一份台湾话单协议格式是用这种语言描述的,不知道如何解码。在网上查到资料极少。如下:
http://fanqiang.chinaunix.net/a3/b5/20010525/150710.html
http://www.ctiforum.com/standard/standard/asn.1/asn ...


麻烦你发一份给我,好吗?谢谢
wuleisky@sina.com.cn
作者: antonym55    时间: 2007-05-24 15:02
如果只是应用的话可以用asn1c 或snacc  把asn 文件转成c/cpp文件,
asn1c
ASN.1 compiler for C
This ASN.1 compiler turns the formal ASN.1 specifications
into the C code.  The compiler is shipped together with
conformant BER/DER/XER codecs.  The X.509 and GSM TAP3
decoding examples are shipped as well.



snacc
ASN.1 to C or C++ or IDL compiler
Snacc is short for "Sample Neufeld ASN.1 to C Compiler" and ASN.1
stands for Abstract Syntax Notation One (ITU-T X.208/ISO 8824).
Snacc supports a subset of ASN.1 1988.  If you need features of
ASN.1 1992 or later, snacc is not for you.


Given an ASN.1 source file(s) snacc can produce:

1. C routines for BER encoding, decoding, printing and freeing.
2. C++ routines for BER encoding, decoding, and printing.
3. A type table that can be used with C driver routines
   for BER encoding, decoding, printing and freeing.

If you want to build snacc based applications, you want to install
the libsnacc-dev package, too.  Your application will then depend on
the snacc libraries, you find in the libsnacc0c2 package.


一般生成的代码需要做少量的修改就可以用了,最好通讯双方都用同一个版本的asn1编译器
不相同也没什么大的问题,不过需要花一点时间进行测试。

[ 本帖最后由 antonym55 于 2007-5-24 15:12 编辑 ]
作者: antonym55    时间: 2007-05-24 15:09
晕了,晕了,楼上的楼上把这么老的贴子翻出来, 我还跟着回复

[ 本帖最后由 antonym55 于 2007-5-24 15:28 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2