ETERM3.84 三合一插件中创建行程单加密算法学习分析

by Administrator 2013.1.13 13:47
 中航信于2013年1月1日,三合一正式支持打印国际行程单,也因此对之前明文的指令进行了加密。由于兴趣,让我对它进行了研究,花了两周时间,才把算法全部分析完成。下面我们大至来说说他是怎么处理的:1、通过抓包工具,我们可以看到,密文由两部份组成,INFO1 和 INFO2。如下图所示: INFO1比较容易分析,仔细观查后发现,他是由10位票号(票号的最后10位)加上6位时间组成。INFO2光是看是看不出来了。如果能看出来的人,那就是神仙了(但是这世上有神仙吗,不知道)因为我们不是神仙,所以只能从逆向学的角度来分析了。一看INFO2全由字母和数字组成,在大脑中搜索一遍自己熟悉的加密算法,没有找到。可能有人说是BASE64,可BASE64还有别的字符,因此可以肯定不是,MD5? MD5输出是32位,不对。 没办法,只好请教WINDBG大神了, 大神也耐心的作出来如下回答:1、通过对明文指令(以国内为例: “TRAVELSKY-PRINV 票号,{ITTN={行程单号}}||TIME=6位当前时间”)进行加密处理。2、加密过程中用到了INFO1,对INFO1 进行了4次MD5,再通过和明白指令进行运算得到最终的INFO2。航信主机收到密文后,通过逆运算很容易就能得到明白,这样做是保证了整个过程的安全性。在此向不断对软件进行完善的大哥们致敬,此分析只是大概整理一下算法的思路和脉络,仅供学习研究使用。如是你想知道和更多,更细,请学习逆向工程(这是一门博大的学问)  

Tags:

Eterm PID技术相关

eterm 通信协议分析 eterm443破解 eterm 开发 (二)

by Administrator 2012.7.11 08:07
关于eterm通信协议、eterm443破解的研究,过了好久才写了eterm开发的第二篇 ,后面陆续会有系列的文章出来。        eterm的账号按认证方式分有:350密码认证、地址认证、443加密认证。        各地的航信分公司或者 是凯亚 也会在eterm连接上加上一些代理工具、转发工具、vpn连接等比如说 新疆的pdlan(专用vpn工具)、重庆的se、西安的ipe、辽宁的vpn......这些工具无非都是做了链路控制、转发包和终端控制,用户终端都还是eterm,所以研究透了eterm这些中间层都好说。eterm的三种认证方式,地址认证是通过客户端地址来认证客户端,350密码认证是通过用户名密码来认证客户端,443密码加密认证也是通过用户名密码来认证客户端,其实它们的通信协议都是一样,只不过,地址认证的时候,登录所发数据包里面的用户名和密码都是7个!,443密码加密认证使用的socket连接在传输层是经过加密的。所以把350密码认证的通信协议 弄懂了,其它都ok,并且非加密的研究起来也很方便,登录、测试没有地址限制,socket是明文传输,方便查看数据包结构。那怎么研究呢?方法一:黑盒分析:我们要了解的一个通信协议,那么我们需要看到服务端和客户端交互的数据包,所以我们需要一个socket包查看工具,这种工具很多,iris、commview、M$的nm以及种sniffer工具都可以。通过大量数据包采样、分析得到通信的一般规律,比如每次登录的时候,都要发某个固定包头,中间有些包是账号密码 等等,慢慢整理出通信协议。方法二:白盒逆向:我想知道客户端怎么和服务端交互,可以直接使用反汇编工具、win32调试工具,跟踪到客户端如何组织要发送出去的数据,怎么处理接收到的数据,从而整理出 通信协议 以及一些关键算法。两种方法各有所长,对于一般通信规律用黑盒分析比较快速,而一些加密算法非白盒逆向而不能。350密码的研究完了,地址的也就一样了,只不过登录的时候用户名、密码发7个!,下面的问题是443加密认证破解关于443加密认证可以参看这两篇 文章:SSL是如何工作的SSL原理443加密认证通信协议和350一样,只不过传输层是加密的,传输层的事儿,需要你自己去研究公钥、密钥、证书么?

Tags:

Eterm PID技术相关

eterm 开发点滴2

by Administrator 2012.7.6 02:05
eterm中发送一条指令后,数据不能一次全部接受到,而需要另外发送 pn 指令才能收到后一页的数据。那如何判断是否需要发送pn指令呢,我总结出一般有以下几种情况(可能有遗漏):1.在接收到的数据包经解析后得到的最后一行数据的第79或80个字符为+号。2.在最后一行有page m/n ,如果m<n。3.最后一行有PN显示。

Tags:

Eterm PID技术相关

eterm开发点滴1

by Administrator 2012.7.6 02:04
在开发eterm相关应用中,碰到数据包粘包问题,比如刚连上航信服务器后,如果马上发送别的指令(如,avh等),有时会发现返回的数据包中混杂有其它包,比如f8新闻包或上一个指令返回的一部分数据包。这个问题处理起来比较麻烦,要把这些包完整的区分开发不是很容易。那是什么原因引起了这种情况呢,。刚连接上航信服务器是,偶尔系统会返回消息包,新闻提示包,还有航信的限制指令发送间隔限制,如果指令序列发送得太快,也会造成这情况。因此,在代码连接上服务器后,不要马上发指令,应判断socket中是否还有数据后再继续发送下一个指令。

Tags:

Eterm PID技术相关

航段组(SS、SD、SA、SN)的建立

by Administrator 2012.7.6 01:46
代理人对航班座位进行实际销售是由建立航段组来完成的。 在介绍如何建立航段组之前,有必要先简述一下航段组的分类。一般情况下,航段组可以分为:(1) 可采取行动的航段组(Actionable)(2) 信息航段组(Information)或到达情况不明航段组(ARNK)(3) 不定期航段组(OPEN)SS、SDSA SN对于可采取行动的航段组(Actionable)通常有两种方法可以申请航班座位: *直接建立航段组(SS) *间接建立航段组(SD)直接建立航段组是在营业员知道待订航班的所有信息如航班号、日期、航段、舱位、座位数及起飞时间的情况下建立起来的。间接建立则需要先将航班信息提取出来,再根据旅客的要求选择适当的班次。直接建立航段组(SS)指令格式>SS: 航班号/舱位/日期/航段/行动代码/订座数/起飞时间 到达时间 【格式说明】 1. 使用SS直接建立航段组时,对于中国民航的航空公司的航班, 代理人只能订取系统中实际存在的航班; 2. 对于外国航空公司的航班,代理人可以任意订取,即使该航班实际并不存在,也可以建立。故用SS订取外国航空公司的航班时,营业员应事先了解详细的航班情况;3. 营业员使用SS直接建立航段组时,一次输入最多可订取5个 航班。 举 例例1.申请订取CA1301 航班,Y 舱,20OCT,北京到广州的一个座位。RT后记录为: 1.CA1301 Y SA20FEB PEKCAN DK1 1450 1745 74E S 0 2.PEK099例2. 订取CA1301 航班,Y 舱,20OCT,北京到广州的一个座位。 >SS:CA1301Y20OCT PEKCAN LL1 【说明】其中‘LL1’为候补1个座位。RT 后记录为:  1. CA1301 Y SA20OCT PEKCAN DW1 1450 1745 74E S 0 2.PEK099【说明】 在输出时有两项特别值得代理人注意:A. 输出的行动代码: 代理人应在一定程度上了解不同的行动代码的含义:(1) 可直接销售(DIRECT SELL)的航空公司,即AV 中有DS# 标识DK, DR : 销售成功且直接占座DW : 候补状态NN : 为申请状态(2) 可直接存取(DIRECT ACCESS)的航空公司SS : 航班有座位可进行销售 NN : 航班没有座位,需进行申请(3) 以CO-HOST 方式联接的航空公司 SS : 航班有座位可进行销售 NN : 航班没有座位,需进行申请(4) 无协议的航空公司NN : 航班状态不明,需进行申请B.订座状态标识:代理人系统为代理人提供了众多的可直接销售的航空公司(包括所有的中国民航的航空公司和众多的国外的航空公司),当代理人系统与这些航空公司系统的联接出现问题时,销售无法正常的进行,系统会在代理人对航班进行销售时给予提示。例: 代理人系统与SABRE 系统联接出现问题,系统在航段组提示”*DN*”。 1. AA6989 Y TU29SEP YYZYVR NN1 1245 1437 DN 2. PEK099在这种情况下,代理人可等待系统联接正常再进行销售或完成操作等待SABRE 系统的回复。间接建立航段组(SD)间接建立航段组是利用航班时刻表、指定日期班机时刻表或航班座位可利用情况建立航段组。指令格式>SD: 航线序号 舱位等级 日期 行动代号 订座数 到达情况标识 例1.航班可利用状态显示如下。 >AV:PEKCAN/+   30SEP(WED) PEKCAN1- CA1321 PEKCAN 0900 1200 340 0 M DS#FA AS CA DS YA BA HA KA LS MS QS TS GS XS WS VS2 WH2137 PEKCAN 1030 1310 300 0 M DS#FA YA BA RA HA Z53 CZ3102 PEKCAN 1210 1500 777 0 M DS#CA DS YA WA KA HA MA GS QS VS BS ZS4 XO9311 PEKCAN 1250 1555 TU5 0 M AS#YL KL HL MQ5+ CZ346 PEKCAN 1435 1720 77B 0 M DS#FS AS C6 D6 Y1 KA MA GS ZS   订取CA1321 航班F 舱1 个座位:              输入后显示为: 1. CA1321 F WE30SEP PEKCAN DK1 0900 1200 340 S 0 2. PEK099【说明】 SD 的输出内容与SS 的结果是一样的。SS 一个指令便可以建立航段组,而SD 要经过两步,即AV、SD 才可建立航段组。出错信息提示: UNABLE:当所订的航班舱位不存在或状态不正确时,系统给出应答为UNABLE并显示航班情况。 如订取CA1321的D舱,系统应答为:    CA1321D 30SEP PEKCAN NN1UNABLE30SEP(WED)     PEKCAN1- CA1321 PEKCAN 0900 1200 JET 0DS# FA AS CA DS YA BA HA KA LS MS QS TS GS XS WS VS2 WH2137 PEKCAN 1030 1310 300 0 MDS# FA YA BA RA HA ZA3 CZ3102 PEKCAN 1210 1500 777 0 MDS# CA DS YA WA KA HA MA GS QS VS BS ZS4 XO9311 PEKCAN 1250 1555 TU5 0 MAS# YL KL HL MQ5+ CZ346 PEKCAN 1435 1720 77B 0 MDS# FS AS C6 D6 Y1 KA MA GS ZS   ACTION:行动代码不正确SEATS:订座数与PNR 中旅客数不一致SEGMENT:城市对输入无效TIME:输入时间不正确FLT NUMBER:航班号不正确SCH NBR:航线序号不符到达情况不明航段的建立(SA)SA指令可以建立信息航段,这样的航段不占用座位,只是作为信息通知营业员,为旅客预留联程航班的座位;或者为了保证PNR 中的航段的连续性,便于打票,而建立此航段。指令格式>SA:日期 始发城市 目的地城市举例例1. 一位天津的旅客要求订北京至上海的航班座位。按旅客的要求建立了记录,还应在PNR 中说明,旅客是从天津到北京的。>RT:   1.WANG/JUN 2. CA1501YFR10DECPEKSHADK108401035777S0 3.BJS/T PEK/T 010-63406973/SHIPU TRAVE AGENCY/LIU DE PU ABCDEFG 4.66017755 5.TL/1200/07DEC/BJS123 6.BJS123 >SA:TSNPEK >RT:   1.WANG/JUN 2. ARNK TSNPEK 3. CA1501 Y FR10DEC PEKSHA DK1 0840 1035 777 S 04.BJS/T PEK/T 010-63406973/SHIPU TRAVE AGENCY/LIU DE PU ABCDEFG 5.66017755 6.TL/1200/07DEC/BJS123 7.BJS123 @ CA1501 Y FR10DEC PEKSHA HK1 0840 1035 N6B7K 例2.地面运输航段。 营业员在打票时可能会遇到这样的情况,输入FC 项时不接收。   1.WANG/JUN NK8TX 2.CA925 T FR24DEC PEKNRT RR1 0920 13503.CA922 T MO10JAN KIXPEK HK1 1535 20104.BJS/TPEK/T010-63406973/SHIPUTRAVEAGENCY/LIUDEPUABCDEFG 5.66017755 6.RMK CA/H1C93 7.FN/FCNY8520.00/SCNY6000.00/C9.00/XCNY166.00/TSWCNY166.00XT/ACNY8686.00 8.FP/CASH,CNY 9.BJS123 >FC: BJS CA TYO 514.65YLPX1M /- OSA CA BJS451.22YLPX1M NUC965.87END/ROE8.277400 FC 输入时,系统回应:  CONTINUITYPNR 中的航段不连续,需要手工加入NRT 到KIX 航段,然后才可输入FC,再打票。 >SA:NRTKIX FC: BJS CA TYO 514.65YLPX1M /- OSA CABJS451.22YLPX1M NUC965.87END/ROE8.277400   1. WANG/JUN NK8TX2. CA925 T FR24DEC PEKNRT RR1 0920 1350 3. ARNK            NRTKIX 4. CA922 T MO10JAN KIXPEK HK1 1535 20105. BJS/T PEK/T010-63406973/SHIPUTRAVEAGENCY/LIUDEPUABCDEFG6. 66017755 7. FC/BJS CA TYO514.65YLPX1M /-OSA CA BJS0 451.22YLPX1M UNC965.87ENDROE8.2774008. RMK CA/H1C93 9. FN/FCNY8520.00/SCNY6000.00/C9.00/XCNY166.00/TSWCNY166.00XT/ACNY8686.00 10. FP/CASH,CNY 11. BJS123 >DZ:1 CNY8686.00 NK8TX 例3.信息航段。 旅客12 月10 日从SHA 到PEK,乘坐MU5103 航班的Y 舱,订座情况为HK。此项仅作为一条信息提示营业员,从PEK 出发的下一段应为旅客保留座位。>SA:MU5103Y10DEC SHAPEK HK PNR 建立后为:   1.XIE/FENG M4MMG 2. MU5103 Y TH10DEC SHAPEK HK3. CA1321 Y FR11DEC PEKCAN HK1 0900 12004.25365.T/999-2200605251 6.RMK CA/JV3LK7.PEK099 【说明】 1.SA航段的行动代码后不跟具体的座位数和时间;2.该PNR中的MU5103 航段只是信息航段,不在本系统中占座位。 出错信息提示:FORMAT : SA 指令不应带座位数ACTION CODE : 行动代码不正确 CITY PAIR : 城市或城市对输入不正确不定期航段的建立(SN)不定期航段(OPEN)组是为方便旅客行程,事先为旅客以不定期航段出票,旅客可以依据各自情况签转航班。作为不定期航段,必须确认的内容是航段和舱位,其他内容可以置为不确定信息,如航空公司、旅行日期。指令格式举例例1.建立PEK 到CAN,12 月12 日,F 舱的OPEN 航段。  >RT:  1.XIE/FENG M4MMN 2.CZ3101 K TU01DEC CANPEK RR1 0820 1050 3.YYOPEN F PEKCAN 4.C2526 5.T/999-1069235121-122 6.RMK CA/JV3LM7.PEK099 例2.旅客购买北京新加坡往返机票,回程为新加坡航空公司的Y 舱OPEN。  1. WANG/JUN M479T 2. SQ811 N SU20DEC PEKSIN RR1 0825 1450 3. SQOPEN Y SINPEK 4. 66017755 5. FC/PEK B-20DEC A-20DECSQSIN413.64YEE3/14B-23DEC A-03JANSQPEK 413.64YEE3/14 NUC827.28END ROE8.27998 6. FN/FCNY6850.00/SCNY5000.00/C0.00/XCNY76.00/TCNY76.00SG/ACNY6926.007. EI/ NON-END/RRTE/NO CHANGE OF FLT/DTE ALLOWED ON PEK-SIN 8. FP/CASH,CNY/AGT08310111 9. PEK099 【说明】1.只有OPEN航段不能建立起PNR;2.出国内票时,有些航空公司不允许代理人出OPEN 票,营业员应根据航空公司的规定进行操作。出错信息提示:CITY PAIR : 城市或城市对输入不正确AIRLINE : 航空公司代码不正确

Tags:

Eterm PID技术相关

Eterm验证码(二) Eterm源代码

by Administrator 2012.7.4 03:14
Eterm验证码 源代码 ,现在分享出来,供大家研究,学习,交流讨论qq群:243270158 下面是源代码: 部分欠费的Office,或者有异常的Office的Eterm在完成正常的登录过程后,主机会向客户端发送以01F1开头的数据包(被分成多个包分段发送),Eterm中就会出现图型验证码,就是大家说的Eterm验证码,在这组数据中:0000H: 01 F1为验证码包标识 62 1A包长度0020H: 42 4D位图标识 F661位图长度(低字节在前) 36 04位图阵列起始位置,这位标识之后的数据都是BMP图像数据。0030H: 2800 位图信息头的长度 2C 01 00 00 位图宽度 50 00 00 00 位图高度0040H: 0800表示位图色彩级别   00 00 00 00 表示压缩级别 00 00 C0 5D 位图阵列大小在01F1之后到424D之前还有二十字节 的数据,应该是验证码序号,这部分数据应该是作为回发数据的基础数据。用户在输入验证码后,Eterm会向主机发送一个数据包。此数据包为加密包,数据包以01 F2开头,后面的数据中只有中间有八组十六进制数据,其它全为零。现将这部分Eterm把验证码加密回发的源代码公开,供大家研究,有问题请到 qq群:243270158 交流。     /// <summary>    /// eTerm汉字编码类    /// </summary>    public class eTermEncode    {    }   /// <summary>    /// 验证码处理    /// </summary>    public sealed class CheckCode    {        public byte[] _0040EC05(byte[] F1Head, string Code)        {            if (Code.Length < 4||F1Head.Length<24)            {                return null;            }            Byte[] _0012F810 = new byte[8];            _0012F810[0] = Convert.ToByte(Code[0]);            _0012F810[1] = Convert.ToByte(Code[1]);            _0012F810[2] = Convert.ToByte(Code[2]);            _0012F810[3] = Convert.ToByte(Code[3]);            //256D5400            _0012F810[4] = Convert.ToByte(0x00);            _0012F810[5] = Convert.ToByte(0x54);            _0012F810[6] = Convert.ToByte(0x6D);            _0012F810[7] = Convert.ToByte(0x25);            //string s_0059B3EC = "C1 C6 CB 35 52 DB 54 34 83 F2 5D 9C 18 30 25 00";            //string s_0059B3EC = "C1 0F 0C 35 2C 71 54 B6 2F F2 5D 4C C3 30 74 00";            string s_0059B3EC = string.Format("C1 {0} {1} 35 {2} {3} 54", F1Head[21].ToString("X2"), F1Head[2].ToString("X2"), F1Head[10].ToString("X2"), F1Head[7].ToString("X2"));            string s_0059B3F3 = string.Format("{0} {1} F2 5D {2} {3} 30", F1Head[1].ToString("X2"),  F1Head[8].ToString("X2"),F1Head[17].ToString("X2"),F1Head[15].ToString("X2"));            byte[] _0059B3EC = Command.StringToBytes(s_0059B3EC);            byte[] _0059B3F3 = Command.StringToBytes(s_0059B3F3);            byte[] _0012F804 = null;            byte[] _0012F388 = null;            string s_0012F350 = "00 00 00 00 00 00 00 00 01 01 00 00 01 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00";            byte[] _0012F350 = Command.StringToBytes(s_0012F350);            _0040D6B4(_0012F810, out _0012F388, _0059B3EC, ref _0012F350);            _0040D6B4(_0012F388, out _0012F804, _0059B3F3, ref _0012F350);            return _0012F804; //加密结果        }        /// <summary>        ///         /// </summary>        /// <param name="_0059B3EC">验证码序号</param>        /// <param name="_0012F388">输出参数</param>        /// <param name="_0012F810">用户输入 的验证码</param>        private void _0040D6B4(byte[] _0012F810, out  byte[] _0012F388, byte[] _0059B3EC, ref byte[] _0012F350)        {            _0012F388 = new byte[8];             byte[] _0012F288 = null;            byte[] _0012F1E8 = null;            byte[] _0012F330 = null;            byte[] _0012F228 = null;            byte[] _0012F300 = null;            byte[] _0012F258 = null;            byte[] _0012F174 = null;            byte[] _0012F1C8 = null;            byte[] _0012F1A4 = null;            byte[] _0012F2C0 = null;            _0040DA5B(_0059B3EC, out _0012F288);            byte[] _0012F194 = (byte[])_0012F810.Clone();//将用户输入 的验证码拷贝一份            _0040D88F(_0012F194, out _0012F1E8);            _0040D992(_0012F1E8, out  _0012F330);            Array.Copy(_0012F330, 32, _0012F350, 0, 32);            for (int i = 0; i < 16; i++)            {                _0040DB4F(_0012F288, i);                _0040DC9E(out _0012F228, _0012F288);                _0040DA19(_0012F350, out _0012F300);                _0040DCE3(_0012F228, _0012F300, out _0012F258);                _0040DD28(_0012F258, out _0012F174);                _0040DDEF(_0012F174, out _0012F1C8);                _0040DE34(_0012F330, _0012F1C8, out  _0012F1A4);                if (i < 15)                {                    _0040DE79(_0012F350, _0012F330);                    _0040DE79(_0012F1A4, _0012F350);                    Array.Copy(_0012F350, 0, _0012F330, 32, 32);                    //Command.DisplayBytes(_0012F330,"执行完一轮For后_0012F330的值 ");                }                else                {                    _0040DE79(_0012F1A4, _0012F330);                    Array.Copy(_0012F330, 32, _0012F350, 0, 32);                }            }            _0040D9D4(_0012F330, out _0012F2C0);            _0040D8FE(_0012F2C0, _0012F194);            Array.Copy(_0012F194, 0, _0012F388, 0, 8);        }        /// <summary>        ///         /// </summary>        /// <param name="_0059B3EC"></param>        /// <param name="_0012F288"></param>        /// <param name="_0012F428">函数中用到的一段内存</param>        private void _0040DA5B(byte[] _0059B3EC, out byte[] _0012F288)        {            _0012F288 = new byte[56];            string s_0012F428 = "39 31 29 21 19 11 09 01 3A 32 2A 22 1A 12 0A 02 3B 33 2B 23 1B 13 0B 03 3C 34 2C 24 3F 37 2F 27 1F 17 0F 07 3E 36 2E 26 1E 16 0E 06 3D 35 2D 25 1D 15 0D 05 1C 14  0C 04";            byte[] _0012F428 = Command.StringToBytes(s_0012F428);            byte[] _0012F0E8 = new byte[56];//_0012F0E8            byte[] _0012F120 = new byte[64];//_0012F120            _0012F120[7] = Convert.ToByte(2);            _0012F120[15] = Convert.ToByte(9);            _0012F120[23] = Convert.ToByte(5);            _0012F120[31] = Convert.ToByte(8);            _0012F120[39] = Convert.ToByte(0xA);            _0012F120[47] = Convert.ToByte(1);            _0012F120[55] = Convert.ToByte(0);            _0012F120[63] = Convert.ToByte(7);//第二次调用 时这里是1,目前没发现对结果有影响             for (int i = 0; i < 7; i++)            {                for (int j = 0; j < 8; j++)                {                    int eax = 0;                    eax = _0059B3EC[i];                    int ecx = 7 - j;                    int cl = ecx & 0xFF;                    eax = eax / Convert.ToInt32(Math.Pow(2, cl));                    //eax = eax >> cl;                    eax = eax & 0x1;                    _0012F0E8[j + i * 8] = Convert.ToByte(eax);//ecx是顺序增长的可以用k代替                    //int lea = j + i * 8;                    //int ptr_ss = 120 - lea;                    //Console.WriteLine(ptr_ss.ToString());                }            }            //Command.DisplayBytes(_0012F0E8, "_0012F0E8");            for (int i = 0; i < 8; i++)            {                for (int j = 0; j < 7; j++)                {                    //edx=i;                    //edx=edx*7;                    //edx=edx+j;                    int edx = j + i * 7;                    //eax=i;                    //ecx=j;                    //eax=ecx+eax*8;                    int eax = j + i * 8;                    _0012F120[eax] = _0012F0E8[edx];                }            }            //Command.DisplayBytes(_0012F120, "_0012F120");            for (int i = 0; i < 56; i++)            {                //eax=0012F3b4基地址                //eax=eax+i;                int ecx = _0012F428[i];                //edx=0012F288基地址                //edx=edx+i;                int al = _0012F120[ecx - 1];                _0012F288[i] = Convert.ToByte(al & 0xFF);            }            //Command.DisplayBytes(_0012F288, "_0040DA5B  执行完后的  _0012F288");        }        private void _0040D88F(byte[] _0012F194, out byte[] _0012F1E8)        {            //char[] codeChar = Code.ToCharArray();            _0012F1E8 = new byte[64];            for (int i = 0; i < 8; i++)            {                for (int j = 0; j < 8; j++)                {                    //edx=_0012F194 基地址                    int eax = _0012F194[i] & 0xFF;                    int ecx = 7;                    ecx = ecx - j;                    eax = eax / Convert.ToInt32(Math.Pow(2, ecx & 0xFF));                    eax = eax & 0x1;                    //ecx=i;                    //edx=j;                    //ecx=edx+ecx*8;                    ecx = j + i * 8;                    //edx=_0012F1E8基地址;                    _0012F1E8[ecx] = Convert.ToByte(eax);                }            }            //Command.DisplayBytes(_0012F1E8, "_0040D88F  执行完后的  _0012F1E8");        }        /// <summary>        ///         /// </summary>        /// <param name="_0012F1E8"></param>        /// <param name="_0012F330"></param>        /// <param name="_0012F3B8">函数中用到的一段内存</param>        private void _0040D992(byte[] _0012F1E8, out  byte[] _0012F330)        {            _0012F330 = new byte[64];            string s_0012F3B8 = "3A 32 2A 22 1A 12 0A 02 3C 34 2C 24 1C 14 0C 04 3E 36 2E 26 1E 16 0E 06 40 38 30 28 20 18 10 08 39 31 29 21 19 11 09 01 3B 33 2B 23 1B 13 0B 03 3D 35 2D 25 1D 15 0D 05 3F 37 2F 27 1F 17 0F 07 20 01 02 03";            byte[] _0012F3B8 = Command.StringToBytes(s_0012F3B8);            for (int i = 0; i < 64; i++)            {                //ecx=0012F3B4基地址                //ecx=ecx+i;                int edx = _0012F3B8[i];                //int eax=_0012F330基地址                //eax=eax+i;                //ecx=_0012F1E8基地址                _0012F330[i] = _0012F1E8[edx - 1];            }            //Command.DisplayBytes(_0012F330, "_0040D88F  执行完后的  _0012F330");        }        /// <summary>        ///         /// </summary>        /// <param name="_0012F288"></param>        /// <param name="B">第一个参数</param>        private void _0040DB4F(byte[] _0012F288, int arg2)        {            //Command.DisplayBytes(_0012F288, "_0040DB4F执行前0012F288的值");            string s__0012F460 = "01 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01";            byte[] _0012F460 = Command.StringToBytes(s__0012F460);            int eax = arg2;            //ecx=0012F3B4基地址            int edx = _0012F460[eax];//0012F3B4+eax+0xAC            int c = edx;            int ecx = 0;            byte[] _0012F15C = new byte[4];            for (int b = 0; b < c; b++)            {                //edx=_0012F288基地址                //edx = edx + b;                eax = b;                ecx = _0012F288[b];                _0012F15C[b] = Convert.ToByte(ecx & 0xFF);//0040DB8F  |MOV BYTE PTR SS:[EBP+EAX-4],CL            }            //Command.DisplayBytes(_0012F288, "第" + (arg2 + 1).ToString() + "轮,完成第一个for _0012F288");            for (int b = 0; b < 28 - c; b++)            {                //ecx = b;                //ecx=ecx+c;                //edx=0012f288基地址                //edx=edx+b                //eax=0012f288基地址                ecx = _0012F288[b + c];                _0012F288[b] = Convert.ToByte(ecx & 0xFF);            }            //Command.DisplayBytes(_0012F288, "第"+(arg2+1).ToString()+"轮,完成第二个for _0012F288");            for (int b = 0; b < c; b++)            {                ecx = 28 - c + b;                //edx=0012F288基地址                eax = b;                eax = _0012F15C[b];//0040DBF5  |MOV AL,BYTE PTR SS:[EBP+EAX-4                _0012F288[ecx] = Convert.ToByte(eax & 0xFF);            }            //Command.DisplayBytes(_0012F288, "第" + (arg2 + 1).ToString() + "轮,完成第三个for _0012F288");            for (int b = 0; b < c; b++)            {                //eax=0012f288基地址                eax = eax + b;                ecx = b;                edx = _0012F288[28 + b];                _0012F15C[b] = Convert.ToByte(edx & 0xFF);            }            //Command.DisplayBytes(_0012F288, "第" + (arg2 + 1).ToString() + "轮,完成第四个for _0012F288");            for (int b = 0; b < 28 - c; b++)            {                //ecx=c+b+28;                //_0012F288[b + 28] = _0012F288[ecx&0xFF];                edx = c;                eax = b;                ecx = eax + edx + 28;                //edx=0012F288基地址                //edx=edx+b;                //eax=0012F288基地址                ecx = _0012F288[ecx];                _0012F288[b + 28] = Convert.ToByte(ecx & 0xFF);            }            //Command.DisplayBytes(_0012F288, "第" + (arg2 + 1).ToString() + "轮,完成第五个for _0012F288");            for (int b = 0; b < c; b++)            {                ecx = 56 - c + b;                //edx=0012F288基地址                eax = b;                //eax = _0012F15C[eax];//[ebp+eax-4]                _0012F288[ecx] = _0012F15C[eax];                //ecx = 56 - c + b;            }            //Command.DisplayBytes(_0012F288, "_0040DB4F  执行完后的  _0012F288");        }        private void _0040DC9E(out byte[] _0012F228, byte[] _0012F288)        {            _0012F228 = new byte[48];            string s_0012F470 = "0E 11 0B 18 01 05 03 1C 0F 06 15 0A 17 13 0C 04 1A 08 10 07 1B 14 0D 02 29 34 1F 25 2F 37 1E 28 33 2D 21 30 2C 31 27 38 22 35 2E 2A 32 24 1D 20";            byte[] _0012F470 = Command.StringToBytes(s_0012F470);            for (int i = 0; i < 48; i++)            {                int edx = _0012F470[i];//0040DCC5  |MOVSX EDX,BYTE PTR DS:[ECX+BC]                //int eax=_0012F228基地址+i                //int ecx=_0012F288基地址                int dl = _0012F288[edx - 1];                _0012F228[i] = Convert.ToByte(dl);            }            //Command.DisplayBytes(_0012F228, "_0040DC9E  执行完后的  _0012F228");        }        private void _0040DA19(byte[] _0012F350, out byte[] _0012F300)        {            _0012F300 = new byte[48];            string s_0012F3F8 = "20 01 02 03 04 05 04 05 06 07 08 09 08 09 0A 0B 0C 0D 0C 0D 0E 0F 10 11 10 11 12 13 14 15 14 15 16 17 18 19 18 19 1A 1B 1C 1D 1C 1D 1E 1F 20 01";            byte[] _0012F3F8 = Command.StringToBytes(s_0012F3F8);            for (int i = 0; i < 48; i++)            {                //ecx=0012F3B4;                //int ecx=_0012F3B4基地址+i;                int edx = _0012F3F8[i];//0040DA40  |MOVSX EDX,BYTE PTR DS:[ECX+44]                //eax=0012F300  基地址加i                int dl = _0012F350[edx - 1];                _0012F300[i] = Convert.ToByte(dl);            }            //Command.DisplayBytes(_0012F300, "_0040DA19  执行完后的  _0012F300");        }        private void _0040DCE3(byte[] _0012F228, byte[] _0012F300, out byte[] _0012F258)        {            _0012F258 = new byte[48];            for (int i = 0; i < 48; i++)            {                int edx = _0012F228[i];                int ecx = _0012F300[i];                edx = edx == ecx ? 0 : 1;                _0012F258[i] = Convert.ToByte(edx);            }            //Command.DisplayBytes(_0012F258, "_0040DCE3  执行完后的  _0012F258");        }        private void _0040DD28(byte[] _0012F258, out byte[] _0012F174)        {            _0012F174 = new byte[32];            //string s_0012F4A0 = "0E 04 0D 01 02 0F 0B 08 03 0A 06 0C 05 09 00 07 00 0F 07 04 0E 02 0D 01 0A 06 0C 0B 09 05 03 08 04 01 0E 08 0D 06 02 0B 0F 0C 09 07 03 0A 05 00 0F 0C 08 02 04 09 01 07 05 0B 03 0E 0A 00 06 0D 0F 01 08 0E 06 0B 03 04 09 07 02 0D 0C 00 05 0A 03 0D 04 07 0F 02 08 0E 0C 00 01 0A 06 09 0B 05 00 0E 07 0B 0A 04 0D 01 05 08 0C 06 09 03 02 0F 0D 08 0A 01 03 0F 04 02 0B 06 07 0C 00 05 0E 09 0A 00 09 0E 06 03 0F 05 01 0D 0C 07 0B 04 02 08 0D 07 00 09 03 04 06 0A 02 08 05 0E 0C 0B 0F 01 0D 06 04 09 08 0F 03 00 0B 01 02 0C 05 0A 0E 07 01 0A 0D 00 06 09 08 07 04 0F 0E 03 0B 05 02 0C 07 0D 0E 03 00 06 09 0A 01 02 08 05 0B 0C 04 0F 0D 08 0B 05 06 0F 00 03 04 07 02 0C 01 0A 0E 09 0A 06 09 00 0C 0B 07 0D 0F 01 03 0E 05 02 08 04 03 0F 00 06 0A 01 0D 08 09 04 05 0B 0C 07 02 0E 02 0C 04 01 07 0A 0B 06 08 05 03 0F 0D 00 0E 09 0E 0B 02 0C 04 07 0D 01 05 00 0F 0A 03 09 08 06 04 02 01 0B 0A 0D 07 08 0F 09 0C 05 06 03 00 0E 0B 08 0C 07 01 0E 02 0D 06 0F 00 09 0A 04 05 03 0C 01 0A 0F 09 02 06 08 00 0D 03 04 0E 07 05 0B 0A 0F 04 02 07 0C 09 05 06 01 0D 0E 00 0B 03 08 09 0E 0F 05 02 08 0C 03 07 00 04 0A 01 0D 0B 06 04 03 02 0C 09 05 0F 0A 0B 0E 01 07 06 00 08 0D 04 0B 02 0E 0F 00 08 0D 03 0C 09 07 05 0A 06 01 0D 00 0B 07 04 09 01 0A 0E 03 05 0C 02 0F 08 06 01 04 0B 0D 0C 03 07 0E 0A 0F 06 08 00 05 09 02 06 0B 0D 08 01 04 0A 07 09 05 00 0F 0E 02 03 0C 0D 02 08 04 06 0F 0B 01 0A 09 03 0E 05 00 0C 07 01 0F 0D 08 0A 03 07 04 0C 05 06 0B 00 0E 09 02 07 0B 04 01 09 0C 0E 02 00 06 0A 0D 0F 03 05 08 02 01 0E 07 04 0A 08 0D 0F 0C 09 00 03 05 06 0B 10 07 14 15 1D 0C 1C 11 01 0F 17 1A 05 12 1F 0A 02 08 18 0E 20 1B 03 09 13 0D 1E 06 16 0B 04 19 28 08 30 10 38 18 40 20 27 07 2F 0F 37 17 3F 1F 26 06 2E 0E 36 16 3E 1E 25 05 2D 0D 35 15 3D 1D 24 04 2C 0C 34 14 3C 1C 23 03 2B 0B 33 13 3B 1B 22 02 2A 0A 32 12 3A 1A 21 01 29 09 31 11 39 19 00 00 00 00 00 00 00 00 00 00 00 00 B0 F5 38 01 B0 F5 38 01 34 F7 12 00";            string s_0012F4A0 = "0E 04 0D 01 02 0F 0B 08 03 0A 06 0C 05 09 00 07 00 0F 07 04 0E 02 0D 01 0A 06 0C 0B 09 05 03 08 04 01 0E 08 0D 06 02 0B 0F 0C 09 07 03 0A 05 00 0F 0C 08 02 04 09 01 07 05 0B 03 0E 0A 00 06 0D 0F 01 08 0E 06 0B 03 04 09 07 02 0D 0C 00 05 0A 03 0D 04 07 0F 02 08 0E 0C 00 01 0A 06 09 0B 05 00 0E 07 0B 0A 04 0D 01 05 08 0C 06 09 03 02 0F 0D 08 0A 01 03 0F 04 02 0B 06 07 0C 00 05 0E 09 0A 00 09 0E 06 03 0F 05 01 0D 0C 07 0B 04 02 08 0D 07 00 09 03 04 06 0A 02 08 05 0E 0C 0B 0F 01 0D 06 04 09 08 0F 03 00 0B 01 02 0C 05 0A 0E 07 01 0A 0D 00 06 09 08 07 04 0F 0E 03 0B 05 02 0C 07 0D 0E 03 00 06 09 0A 01 02 08 05 0B 0C 04 0F 0D 08 0B 05 06 0F 00 03 04 07 02 0C 01 0A 0E 09 0A 06 09 00 0C 0B 07 0D 0F 01 03 0E 05 02 08 04 03 0F 00 06 0A 01 0D 08 09 04 05 0B 0C 07 02 0E 02 0C 04 01 07 0A 0B 06 08 05 03 0F 0D 00 0E 09 0E 0B 02 0C 04 07 0D 01 05 00 0F 0A 03 09 08 06 04 02 01 0B 0A 0D 07 08 0F 09 0C 05 06 03 00 0E 0B 08 0C 07 01 0E 02 0D 06 0F 00 09 0A 04 05 03 0C 01 0A 0F 09 02 06 08 00 0D 03 04 0E 07 05 0B 0A 0F 04 02 07 0C 09 05 06 01 0D 0E 00 0B 03 08 09 0E 0F 05 02 08 0C 03 07 00 04 0A 01 0D 0B 06 04 03 02 0C 09 05 0F 0A 0B 0E 01 07 06 00 08 0D 04 0B 02 0E 0F 00 08 0D 03 0C 09 07 05 0A 06 01 0D 00 0B 07 04 09 01 0A 0E 03 05 0C 02 0F 08 06 01 04 0B 0D 0C 03 07 0E 0A 0F 06 08 00 05 09 02 06 0B 0D 08 01 04 0A 07 09 05 00 0F 0E 02 03 0C 0D 02 08 04 06 0F 0B 01 0A 09 03 0E 05 00 0C 07 01 0F 0D 08 0A 03 07 04 0C 05 06 0B 00 0E 09 02 07 0B 04 01 09 0C 0E 02 00 06 0A 0D 0F 03 05 08 02 01 0E 07 04 0A 08 0D 0F 0C 09 00 03 05 06 0B 10 07 14 15 1D 0C 1C 11 01 0F 17 1A 05 12 1F 0A 02 08 18 0E 20 1B 03 09 13 0D 1E 06 16 0B 04 19 28 08 30 10 38 18 40 20 27 07 2F 0F 37 17 3F 1F 26 06 2E 0E 36 16 3E 1E 25 05 2D 0D 35 15 3D 1D 24 04 2C 0C 34 14 3C 1C 23 03 2B 0B 33 13 3B 1B 22 02 2A 0A 32 12 3A 1A 21 01 29 09 31 11 39 19 00 00 7C 00 61 00 00 50 0F 93 93 7C 00 00 00 00 F6 61 00 00 00 00 7C 00";            byte[] _0012F4A0 = Command.StringToBytes(s_0012F4A0);            int c = 0;            for (int i = 0; i < 8; i++)            {                int eax = 0;                //ecx=i;                int ecx = i * Convert.ToInt32(Math.Pow(2, 6));                //edx=0012F3b4 基地址                //eax=edx+ecx+EC;                //ecx=0012F258基地址                int edx = _0012F258[i * 6 + 0];                //ecx=0012F258基地址                ecx = _0012F258[i * 6 + 5];                edx = ecx + edx * 2;                edx = edx * Convert.ToInt32(Math.Pow(2, 4));                //eax=eax+edx; //i*Convert.ToInt32(Math.Pow(2,6))+EC+edx                eax = i * Convert.ToInt32(Math.Pow(2, 6)) + edx;                //ecx=_0012F258基地址                edx = _0012F258[i * 6 + 1];                //ecx=_0012F258基地址                ecx = _0012F258[i * 6 + 2];                ecx = ecx * Convert.ToInt32(Math.Pow(2, 2));                edx = ecx + edx * 8;                //ecx=_0012F258基地址                ecx = _0012F258[i * 6 + 3];                edx = edx + ecx * 2;                //ecx=_0012F258基地址                ecx = _0012F258[i * 6 + 4];                edx = edx + ecx;                edx = _0012F4A0[eax + edx];                c = edx;                for (int j = 0; j < 4; j++)                {                    ecx = 3;                    ecx = 3 - j;                    edx = c;                    edx = edx / Convert.ToInt32(Math.Pow(2, ecx & 0xFF));                    edx = edx & 1;                    //eax=_0012F174基地址                    //int eax=eax+j;                    _0012F174[i * 4 + j] = Convert.ToByte(edx & 0xFF);                }            }            //Command.DisplayBytes(_0012F174, "_0040DD28  执行完后的  _0012F174");        }        private void _0040DDEF(byte[] _0012F174, out byte[] _0012F1C8)        {            _0012F1C8 = new byte[32];            string s_0012F6A0 = "10 07 14 15 1D 0C 1C 11 01 0F 17 1A 05 12 1F 0A 02 08 18 0E 20 1B 03 09 13 0D 1E 06 16 0B 04 19 28 08 30 10";            byte[] _0012F6A0 = Command.StringToBytes(s_0012F6A0);            for (int i = 0; i < 32; i++)            {                //ecx=0012F3B4基地址                //ecx=ecx+i                int edx = _0012F6A0[i];//第一次循环指向0012FAFC   0040DE16  |MOVSX EDX,BYTE PTR DS:[ECX+2EC]                //eax=0012F1C8基地址                //eax=eax+i;                //ecx=0012F174基地址                int dl = _0012F174[edx - 1];                _0012F1C8[i] = Convert.ToByte(dl);            }            //Command.DisplayBytes(_0012F1C8, "_0040DDEF  执行完后的  _0012F1C8");        }        private void _0040DE34(byte[] _0012F330, byte[] _0012F1C8, out byte[] _0012F1A4)        {            _0012F1A4 = new byte[32];            for (int i = 0; i < 8; i++)            {                //ecx=0012F330基地址                //ecx=ecx+i;                int edx = _0012F330[i];                //eax=0012F1C8基地址;                //eax=eax+i;                int ecx = _0012F1C8[i];                edx = edx == ecx ? 0 : 1;                //eax=0012F1A4基地址                _0012F1A4[i] = Convert.ToByte(edx);            }            ///Command.DisplayBytes(_0012F1A4, "_0040DE34  执行完后的  _0012F1A4");        }         private void _0040DE79(byte[] _0012F350, byte[] _0012F330)        {            //Command.DisplayBytes(_0012F350,"0040DE79执行前_0012F350的值");            //_0012F330 = new byte[32];            //第二次调用参数:0012F350,0012F3B4            for (int i = 0; i < 16; i++)            {                //ecx=0012F330基地址                //int ecx=ecx+i;                //edx=0012F350基地址                //edx=edx+i;                int eax = _0012F350[i] & 0xFF;                _0012F330[i] = Convert.ToByte(eax);            }            //Command.DisplayBytes(_0012F330, "_0040DE79  执行完后的  _0012F330");        }        private void _0040D9D4(byte[] _0012F330, out byte[] _0012F2C0)        {            _0012F2C0 = new byte[64];            string s_0012F6C0 = "28 08 30 10 38 18 40 20 27 07 2F 0F 37 17 3F 1F 26 06 2E 0E 36 16 3E 1E 25 05 2D 0D 35 15 3D 1D 24 04 2C 0C 34 14 3C 1C 23 03 2B 0B 33 13 3B 1B 22 02 2A 0A 32 12 3A 1A 21 01 29 09 31 11 39 19";            byte[] _0012F6C0 = Command.StringToBytes(s_0012F6C0);            for (int i = 0; i < 32; i++)            {                //ecx=0012F2C0基地址                //ecx=ecx+i;                int edx = _0012F6C0[i]; //0040D9FB  |MOVSX EDX,BYTE PTR DS:[ECX+30C]                _0012F2C0[i] = _0012F330[edx - 1];            }            //Command.DisplayBytes(_0012F2C0, "_0040D9D4  执行完后的  _0012F2C0");        }        private void _0040D8FE(byte[] _0012F2C0, byte[] _0012F194)        {            int edx, ecx;            for (int i = 0; i < 4; i++)            {                //ecx=0012F2C0基地址                edx = _0012F2C0[i * 8 + 0];                edx = edx * Convert.ToInt32(Math.Pow(2, 7));                //eax=0012F2C0基地址                ecx = _0012F2C0[i * 8 + 1];                ecx = ecx * Convert.ToInt32(Math.Pow(2, 6));                edx = edx + ecx;                ecx = _0012F2C0[i * 8 + 2];                ecx = ecx * Convert.ToInt32(Math.Pow(2, 5));                edx = edx + ecx;                ecx = _0012F2C0[i * 8 + 3];                ecx = ecx * Convert.ToInt32(Math.Pow(2, 4));                edx = edx + ecx;                ecx = _0012F2C0[i * 8 + 4];                edx = edx + ecx * 8;                ecx = _0012F2C0[i * 8 + 5];                edx = edx + ecx * 4;                ecx = _0012F2C0[i * 8 + 6];                edx = edx + ecx * 2;                ecx = _0012F2C0[i * 8 + 7];                edx = edx + ecx;                _0012F194[i] = Convert.ToByte(edx & 0xff);            }            //Command.DisplayBytes(_0012F194, "_0040D8FE  执行完后的  _0012F194");        }    }

Tags:

Eterm PID技术相关

Eterm常见出错提示

by Administrator 2012.7.4 02:38
Eterm使用过程当中经常会遇到一些出错信息,希望大家一起参与写下自己遇见的错误代码,这里是整理的我工作遇到的常见错误:ETRY电子票重出票指令,适用于各种原因(比如系统传输等问题)导致电子票出票失败时,在出票当天重新出票。有些情况下,是无法使用该指令的。       ●CAN NOT RETRY THIS PNR. ETDZ FIRST      说明:该PNR没有执行ETDZ指令      ● RMK CA/XXXXX NOT FOUND. PNR MISMATCH       说明:没有返回ICS PNR(航空公司大编码)        ● PNR TICKETED     说明:该PNR已被出票      ● CAN NOT RETRAY THIS ET, TICKET IS OUT OF DATE      说明:该ET票不是当天销售的     ● ACTION           说明:行动代码不正确     ● AIRLINE          说明: 航空公司代码不正确     ● AMOUNT           说明:数量,通常指FC、FN中的票价输入不正确     ● AUTHORITY        说明:权限问题     ● CASH COLLECTION 说明:FN中缺少SCNY项     ● CONTACT ELEMENT MISSING          说明:缺少联系组,将旅客的联系电话输入到PNR中     ● CURRENCY         说明:货币代码不正确     ● DATE             说明:输入的日期不正确.     ● DEVICE            说明:打票机序号不正确     ● DUP ID           说明:PNR中某项重复,或缺少旅客标识     ● ELE NBR         说明:序号不正确     ● FLT NUMBER      说明:航班号不正确     ● FORMAT          说明:输入格式不正确     ● ILLEGAL          说明:不合法     ● INACTIVE         说明:检查打票机各项状态,一般体现在没有进工作号     ● INFANT          说明:缺少婴儿标识     ● INPUT             说明:打票机的输入状态     ● INVALID CHAR      说明:存在非法字符,或终端参数设置有误     ● ITINERARY DOES NOT MATCH FC         说明:FC与PNR中的航程不符     ● MANUAL           说明:手工出票  ● MAX TIME FOR EOT – IGNORE PNR AND RESTART        说明:建立了航段组,但未封口的时间超过5分钟,这时系统内部已经做了IG,将座位还原,营业员应做IG,并重新建立PNR  ● NAME LENGTH        说明:姓名超长或姓氏少于两个字符  ● NAMES              说明:PNR中缺少姓名项  ● NO DISPLAY          说明:没有显示  ● NO NAME CHANGE FOR MU/Y       说明:某航空公司不允许修改姓名   ● NO QUEUE            说明:说明该部门此类信箱不存在  ● OFFICE              说明:部门代号不正确  ● OUTPUT              说明:打票机的输出状态  ● PENDING            说明:表示有未完成的旅客订座PNR,在退号前必须完成或放弃它。  ● PLEASE SIGN IN FIRST   说明:请先输入工作号,再进行查询  ● PLS INPUT FULL TICKET NUMBER           说明:输入完整的票号,航空公司代码及十位票号  ● PLS NM1XXXX/XXXXXX      说明:姓名中应加斜线(/),或斜线数量不正确  ● PNR TKTD            说明:该记录已出过票,取消PNR中的票号项  ● PROFILE PENDING      说明:表示未处理完常旅客的订座,PSS:ALL处理  ● PROT SET            说明:工作号密码输入错误  ● PSGR ID             说明:旅客标识不正确  ● Q TYPE              说明:所要发送到的信箱的种类在目的部门中没有定义  ● Q EMPTY           说明:信箱中此类信箱为空的,已处理完成,没有需要处理的内容  ● QUE PENDING        说明: 表示未处理完信箱中的QUEUE,QDE或QNE  ● RL                  说明:记录编号不存在   ● SCH NBR             说明:航线序号不符  ● SEATS             说明:订座数与PNR中姓名数不一致,可RT检查当前的PNR  ● SEGMENT          说明: 航段● SIMULTANEOUS MODIFICATION—REENTER MODIFICATION    说明: 类似的修改,IG,并重新输入当前的修改● STOCK              说明:   票号不正确或没票号● TICKET PRINTER IN USE   说明: 表示未退出打票机的控制,退出后即可● TICKET STATUS ELEMENT MISSING     说明: 缺少票号组● TIME          说明:   输入时间不正确● UNABLE            说明: 不能● USER GRP          说明: 工作号级别输入错误● WORKING   Q                 说明: 表示营业员正在对某一种信箱进行处理,未处理完时,不能再处理另外一种Q。这时若要结束原来的处理,可以做QDE或QNE,然后再QS:xx。● NOT ENOUGH TICKET NUMBERS ASSIGNED TO DEVICE 说明:电子客票号分配不够DUPLICATE    SEGMENT       重复部分PNR TICKETED 翻译为PNR已出过票,但多数是由于代理没规范订座,ETDZ时假票号并未删除,方法一多做几次直到出票成功,方法二规范订座。● CHECK TAX AMOUNT    说明:检查电子客票退票价格项 XCNYxxxx.xx 税款总额 — 用于填写TAX AMOUNT 栏. 此项可省● TKT MUST BEEN PRINTED TODAY 只能作废当天打印过的客票或者不是自己出的票●ET PASSENGER DATA NOT FOUND 说明:是不能出电子客票●做SP就提示CHECK CONTINUITY AGENCY CT 说明:SP:(人数序号)●eterm指令出错信息RETRANSMIT 说明:这个属于ETERM系统和航空公司系统连接问题 一般体现在CZ 784的航班上婴儿电子客票出票错误提示● 输入:XN IN/TEST/BABY INF(1DEC06)/p1显示:FORMAT解决方法:INF后括号内只要输入婴儿的出生月和年,不需要输日期;● 输入:SSR INFT CA NN1 TEST/BABY 1DEC06/P1/S2显示:BIRTHDAY(DDMMMYY),PLS解决方法:婴儿的出生日月年应输入完全,如01DEC06, 1前面的0也不可省略;● 输入:ETDZ:5/P1,INF显示:  PNR/FC/P1解决方法:单独出婴儿票之前应补充全大人的FN/FC;● 输入:ETDZ:5显示:ET PASSENGER NAME MISMATCH解决方法:婴儿姓名的XN项输入注意INF和(DEC06)之前不要有空格。提示内容:ENSURE XMIT MODE IS VAR AND USE REF: TO REFRESH SCREEN QT CAN123 GQ 0000 0200 RP 0000 0200 KK 0000 0668 RE 0000 0200 SR 0000 0200 TC 0000 0200 TL 0006 0350 SC 0000 1000原因:退票前需要先作废行程单。 提示:DUPLICATE SEGMENT原因:预订的航段重复解决:IG掉之前所做的SS订座指令。 

Tags:

Eterm PID技术相关

航班销售控制指令

by Administrator 2012.7.4 02:35
大系统查看销售情况指令FLP:航班号/日期/航段 (读取航班舱位销售情况)FLR:航班号/日期 (查询航班的订座和出票情况)RO日期/航班号 (查看航班摆舱情况)IM:S/航班号/日期/航段/Y座位数 (调整座位布局) 扩舱/收舱IM:L/航班号/日期/航段/舱位数目 (调整子舱位位数)IM:I/航班号/日期/航段/舱位 S(吸收) R(还原)IM:N/航班号/日期/航段/舱位 S(做成Q状态) R(还原)ACRT:OFFICE号 (有A显示,表示正在工作)MSG:PID号/1 电报内容自由格式 (发电报)AV:J/航班号/起始日期/终止日期 (查看机型变更跟舱位开放情况)DC:日期/航段/航班号/OFFICE号 (检查重复订座)PROCESS (打开Q提出DCQ)FVP:A/日期/到达城市/航空公司 (查看到港的VIP名单)FVP:O/日期/到达城市/航空公司 (查看离港VIP名单)DIH:航班号/日期 (查看航班变更历史记录)AS:航班号/舱位/日期/航段/AS/CIE (使航空公司系统与代理人系统匹配)BSR PRF/航班号/日期 (查每天销售情况)RB:起始日期/终止日期/D/航段 (查询几天的销售情况)也可以使用 RB 日期 航段CLW:航班号/日期 (NO 所有的HL的票)MLXZ:航班号/日期/航段 (提取被取消航班旅客名单)FTKT:航班号/日期/航段 (计算当天各家航空公司客座率)MLB/航班号/日期/航段 (提取旅客名单)如果要看出票代理的OFFICE号 可以MLB/航班号/日期/航段/O/1E如果只要看PNR的话 可以MLB/PNR/航班号/日期/航段/O/1EMLU5/航班号/日期/航段 (提取航班儿童旅客名单)MLG/PNR/航班号/日期/航段 (提取航班团队名单)MLBNG/PNR/航班号/日期/航段 (提取航班非团队旅客名单)MLNR/航班号/日期/航段 (提取不是RR状态的旅客名单)MLR/航班号/日期/航段 (提取RR状态的旅客明名单)MLZX/航班号/日期/航段 (提取已经取消航班的所以旅客名单)MLS1/航班号/日期/航段 (提取GOSHOW旅客名单)MLS2/航班号/日期/航段 (提取NOSHOW旅客名单)MLM/航班号/日期/航段 (提取特殊餐食旅客名单)MLS5/航班号/日期/航段 (提取轮椅旅客名单)ML:L99/航班号/日期/航段 (提取当天出票的旅客名单)MLT3/航班号/日期 (提起假RR记录)SS+航班号+舱位+日期+航段+NN人数 (预定航班 相当于AV+SD指令 不过比AV方便)TN:N/航班号/日期/中转地/F 从其他航班中转到此航班的中转旅客TN:N/航班号/日期/中转地/T 从该航班中转到其他航班的中转旅客BSR:PRF/航班号/日期/航段 查询航班销售进度K票 KK NO票 NO 航空公司B配置大系统指令1 查航班指令AV 航段+乘机日期+参数 (注:参数D 表示直飞,可加可不加)例:AV KMGSHA20JUND2 查看某天某个航段的座位销售数RB 航班日期/航段例:RB 15JUN/KMGURC注:前面0/8表示头等舱有8个座,售0个,8/123表示经济舱123个座,售8个,36/241表示总计售出36个还剩241个。3 查看某天某个航班的座位销售数FLP 航班号/乘机日期 (注,MU以外航班也可查询)例:FLP MU5801/6JUN注:1号框是输入的指令,2号框表示对应的舱已销售座位数,3号框表示总计,已售121个,全舱138个,上座率87%。 4 查MU某个航班舱位的竖试销售量ROC/航班号/日期例:ROC/MU5805/6JUN注:33表示还乘的座位数,132表示全舱数,99表示已售的数含团队,42表示出的团座位数。BKD项竖式相加就是所有的舱位合计售数。GRS表示团队项。5.查看某天MU某个航班上出票的PNR。MLB/航班号/日期例:MLB/MU5819/28JUN注:旅客姓名,PNR,状态。6.查看某天MU某个航班上团队PNR。注:15BL 团名,BL1H2 记录,X 舱位,HN15 状态人数。7.FLR 查看航班记录出票数与预订数格试 FLR 航段+日期例:FLR KMGSHA12NOV其它指令:FF   FD   RT   SK

Tags:

Eterm PID技术相关

婴儿票预订

by Administrator 2012.7.4 02:34
在预订婴儿票时常常会遇到一些问题,却无从下手,希望下面的例子能对有需要的人有点点帮助!以下是一个两个成人带一个婴儿的不同航空公司往返程预订指令:正确的指令为:SS:MU5137/Y/15DEC/SHAPEK/2SS:HU7605/Y/20DEC/PEKSHA/2NM:1林杰1洪峰XN IN/林婴儿 INF(NOV10)/P1TK:TL/1800/05DEC11/CAN378CT:13800138000OSI:HU CTCT13800138000/P1SSR FOID HU HK/NI123/P1SSR FOID HU HK/NI456/P2SSR INFT MU NN1/SHAPEK MU5137 Y 15DEC YINGER/LIN 01NOV10/P1SSR INFT HU NN1/PEKSHA HU7605 Y 20DEC YINGER/LIN 01NOV10/P1@I 下面这个是错误的例子:SS:MU5137/Y/15DEC11/SHAPEK/2SS:HU7605/Y/20DEC11/PEKSHA/2NM:1林杰1洪峰XN IN/林婴儿 INF(NOV10)/P1TK:TL/0920/15DEC11/CAN276CT:15158180646SSR FOID YY HK/NI123/P1SSR FOID YY HK/NI456/P2提交完成以后,eterm将会返回以下错误信息:CUSTOMER RESPONSE NO. 974 SSR INFT 项婴儿姓名输入必须是英文或拼音,格式如:LIN/YINGER正确格式:SSR INFT MU NN1/SHAPEK MU5137 Y 15DEC11 LIN/YINGER 08NOV10/P1SSR INFT HU NN1/PEKSHA HU7605 Y 20DEC11 LIN/YINGER 08NOV10/P1错误格式:SSR INFT MU NN1/SHAPEK MU5137 Y 15DEC11 LINYINGER 08NOV10/P1SSR INFT HU NN1/PEKSHA HU7605 Y 20DEC11 LINYINGER 08NOV10/P1 提交完成以后,eterm将会返回以下错误信息:INFANT NAME 下面几点是前人总结出来的经验: 1. 输入:XN IN/TEST/BABY INF(1DEC06)/p1显示:FORMAT解决方法:INF后括号内只要输入婴儿的出生月和年,不需要输日期; 2. 输入:SSR INFT CA NN1 TEST/BABY 1DEC06/P1/S2显示:BIRTHDAY(DDMMMYY),PLS解决方法:婴儿的出生日月年应输入完全,如01DEC06, 1前面的0也不可省略; 3. 输入:ETDZ:5/P1,INF显示:NCOMPLETE PNR/FC/P1解决方法:单独出婴儿票之前应补充全大人的FN/FC; 4. 输入:ETDZ:5显示:ET PASSENGER NAME MISMATCH解决方法:婴儿姓名的XN项输入注意INF和(DEC06)之前不要有空格。

Tags:

Eterm PID技术相关

电子客票常见问题

by Administrator 2012.7.4 02:32
这些都是我平常工作中遇到的电子客票问题,特整理出来,希望能对大家有帮助。其中错误和提示部分我用红色标记出来了。同样也希望你有什么好的问题解决方案也贴出来和我们一起分享!^_^1。1.ZHU/CHEN JERRY TVWHD2. CZ3151 X TH18MAY SZXPEK RR1 0915 1155 E3.SZX/T SZX/T-0755-83267777,83627777/SZX MO LIN AVIATION SERVICE LTD.,CO/LIUJUN SHAN ABCDEFG4.832607775.135096397926.FC/SZX CZ PEK 530.00Y30 CNY530.00END7.SSR FOID CZ HK1 PPM3205361/P18.RMK CA/BTDTT9.FN/FCNY530.00/SCNY530.00/C3.00/XCNY110.00/TCNY50.00CN/TCNY60.00YQ/ACNY640.0010.EI/BUDEQIANZHUANGENGGAITUIPIAO不得签转更改退票11.FP/CASH,CNY>ETDZ 5FOID IS REQUIRED BEFORE TICKETING解决方法:身份证信息SSR FOID中的证件类型应该改成NI即可,例:SSR FOID CZ HK1 NIM3205361/P12。1.ZHU/CHEN JERRY TVWHD2. CZ3151 X TH18MAY SZXPEK RR1 0915 1155 E3.SZX/T SZX/T-0755-83267777,83627777/SZX MO LIN AVIATION SERVICE LTD.,CO/LIUJUN SHAN ABCDEFG4.832607775.135096397926.FC/SZX CZ PEK 530.00Y30 CNY530.00END7.SSR FOID CZ HK1 NIM3205361/P18.RMK CA/BTDTT9.FN/FCNY530.00/SCNY530.00/C3.00/XCNY110.00/TCNY50.00CN/TCNY60.00YQ/ACNY640.0010.EI/BUDEQIANZHUANGENGGAITUIPIAO不得签转更改退票11.FP/CASH,CNY>SSR FOID CA HK/NI620502560803001/p1DUP ID解决方法:身份证信息输入重复,在记录中已经有这个人身份证信息。3。1.吕华娟 N999L2. MU5130 G WE24MAY PEKPVG RR1 0740 0940 E3.BJS/T BJS/T 010-88510485/PEK TONG DA SI FANG TICKET AGENCY CO.,LTD/QIANLI ABCDEFG 4.T5.SSR FOID MU HK1 NI42098419850210758X/P16.RMK CA/JVK8D7.FN/FCNY450.00/SCNY450.00/C3.00/XCNY110.00/TCNY50.00CN/TCNY60.00YQ/ACNY560.008.TN/781-5902795712/P19.FP/CASH,CNY>SSR TKNE MU HK1 PEKSHA 5130 G24MAY 7815902795712/1/P1ILLEGAL SEGMENT解决方法:SSR TKNE中的航段信息与记录中航段信息不匹配。4。1.王飞跃 S2W3Q                                                                2.  FM9101 Y   TU30MAY  SHAPEK RR1   0815 0955                                3.13811008334                                                                 4.FC/SHA FM PEK 1130.00Y CNY1130.00END                                        5.SSR FOID FM HK1 NI11010819611102147X/P1                                     6.SSR OTHS 1E TKTL ADV TKT NBR TO FM BY 29MAY06/1816/PEK TIM/OR NO ALL SG/BCS FM9101 /Y/30MAY/SHAPEK                                                     7.OSI FM CTCT13811008334                                                      8.RMK CA/BM1LK                                                                9.FN/FCNY1130.00/SCNY1130.00/C3.00/XCNY110.00/TCNY50.00CN/TCNY60.00YQ/        ACNY1240.00                                                                10.FP/CASH,CNY                                                                                                                                          >ETDZ:2                                                                                                                      NON-ET SEGMENT   解决方法:记录中航段没有电子客票标识,也就是航段后面没有E标识。需要与中航信服务台联系,电话010-840184015。1.姚静雯 PWC20                                                                2.  FM9172 L   WE07JUN  HRBPVG RR1   1150 1420          E                     3.SHA/T SHA/T-021-23067000/CITS AMERICAN EXPRESS AIR SERVICES LTD/HUANG MIN     ABCDEFG                               4.AMEX JAMIE/TETRAPAK                                                         5.T                                                                           6.SSR FOID FM HK1 NI310104641004402/P1                                        7.SSR OTHS 1E TKTL ADV TKT NBR TO FM BY 05JUN06/1010/PEK TIM/OR NO ALL SG/BCS      FM9173 /L/05JUN/PVGHRB                    8.RMK CA/JXTK5                                                                9.FN/FCNY1410.00/SCNY1410.00/C3.00/XCNY110.00/TCNY50.00CN/TCNY60.00YQ/ACNY1520.00                 10.TN/774-5900769247/P1                                                        11.FP/CASH,CNY/KC-TPC-CAE                                                        >SSR TKNE FM HK1 HRBPVG 9172 L07JUN 7745900769247/2/P1                          ET TICKET/COUPON NOT FOUND解决方法:记录中只有一个航段,但是在输入SSR TKNE中航段信息却输入的是2。正确输入格式应该是:SSR TKNE FM HK1 HRBPVG 9172 L07JUN 7745900769247/1/P1作者:惊峰 | 分类目录:航空商旅 | 标签:

Tags:

Eterm PID技术相关

关于博主

      什么都懂一点儿,热衷技术,热爱Programming,每有难题,常夜以继日,每有解决方案,手舞足蹈而欣喜若狂;好读书,不求甚解;每有会意,便欣然忘食;常纵情于山水之间,忘乎于尘世之外,唯程序难释怀尔。
       QQ:51557288

归档

最近的评论

声明

本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2011