scanner.l
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:4k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. %{
  2. /*
  3.  * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
  4.  * The Regents of the University of California.  All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that: (1) source code distributions
  8.  * retain the above copyright notice and this paragraph in its entirety, (2)
  9.  * distributions including binary code include the above copyright notice and
  10.  * this paragraph in its entirety in the documentation or other materials
  11.  * provided with the distribution, and (3) all advertising materials mentioning
  12.  * features or use of this software display the following acknowledgement:
  13.  * ``This product includes software developed by the University of California,
  14.  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
  15.  * the University nor the names of its contributors may be used to endorse
  16.  * or promote products derived from this software without specific prior
  17.  * written permission.
  18.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  19.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  20.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  21.  */
  22. #ifndef lint
  23. static const char rcsid[] =
  24.     "@(#) $Header: /usr/local/cvs/nessus-libraries/libpcap-nessus/scanner.l,v 1.3 2003/02/06 20:28:09 renaud Exp $ (LBL)";
  25. #endif
  26. #include <sys/types.h>
  27. #include <sys/time.h>
  28. #include <ctype.h>
  29. #include <unistd.h>
  30. #include "pcap-int.h"
  31. #include "gencode.h"
  32. #include "pcap-namedb.h"
  33. #include "tokdefs.h"
  34. #include "gnuc.h"
  35. #ifdef HAVE_OS_PROTO_H
  36. #include "os-proto.h"
  37. #endif
  38. static int stoi(char *);
  39. static inline int xdtoi(int);
  40. #ifdef FLEX_SCANNER
  41. #define YY_NO_UNPUT
  42. #undef YY_INPUT
  43. #define YY_INPUT(buf, result, max)
  44.  {
  45. char *src = in_buffer;
  46. int i;
  47. if (*src == 0)
  48. result = YY_NULL;
  49. else {
  50. for (i = 0; *src && i < max; ++i)
  51. buf[i] = *src++;
  52. in_buffer += i;
  53. result = i;
  54. }
  55.  }
  56. #else
  57. #undef getc
  58. #define getc(fp)  (*in_buffer == 0 ? EOF : *in_buffer++)
  59. #endif
  60. #define yylval pcap_lval
  61. extern YYSTYPE yylval;
  62. static char *in_buffer;
  63. %}
  64. N ([0-9]+|(0X|0x)[0-9A-Fa-f]+)
  65. B ([0-9A-Fa-f][0-9A-Fa-f]?)
  66. %a 3000
  67. %%
  68. dst return DST;
  69. src return SRC;
  70. link|ether|ppp|slip  return LINK;
  71. fddi return LINK;
  72. arp return ARP;
  73. rarp return RARP;
  74. ip return IP;
  75. tcp return TCP;
  76. udp return UDP;
  77. icmp return ICMP;
  78. igmp return IGMP;
  79. igrp return IGRP;
  80. atalk return ATALK;
  81. decnet return DECNET;
  82. lat return LAT;
  83. sca return SCA;
  84. moprc return MOPRC;
  85. mopdl return MOPDL;
  86. host return HOST;
  87. net return NET;
  88. mask return MASK;
  89. port return PORT;
  90. proto return PROTO;
  91. gateway return GATEWAY;
  92. less return LESS;
  93. greater return GREATER;
  94. byte return BYTE;
  95. broadcast return TK_BROADCAST;
  96. multicast return TK_MULTICAST;
  97. and|"&&" return AND;
  98. or|"||" return OR;
  99. not return '!';
  100. len|length return LEN;
  101. inbound return INBOUND;
  102. outbound return OUTBOUND;
  103. [ nt] ;
  104. [+-*/:[]!<>()&|=] return yytext[0];
  105. ">=" return GEQ;
  106. "<=" return LEQ;
  107. "!=" return NEQ;
  108. "==" return '=';
  109. "<<" return LSH;
  110. ">>" return RSH;
  111. {N} { yylval.i = stoi((char *)yytext); return NUM; }
  112. ({N}.{N})|({N}.{N}.{N})|({N}.{N}.{N}.{N}) {
  113. yylval.s = sdup((char *)yytext); return HID; }
  114. {B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
  115.   return EID; }
  116. {B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", yytext); }
  117. [A-Za-z0-9][-_.A-Za-z0-9]*[.A-Za-z0-9] {
  118.  yylval.s = sdup((char *)yytext); return ID; }
  119. "\"[^ !()nt]+ { yylval.s = sdup((char *)yytext + 1); return ID; }
  120. [^ []tn-_.A-Za-z0-9!<>()&|=]+i {
  121. bpf_error("illegal token: %sn", yytext); }
  122. . { bpf_error("illegal char '%c'", *yytext); }
  123. %%
  124. void
  125. lex_init(buf)
  126. char *buf;
  127. {
  128. in_buffer = buf;
  129. }
  130. /*
  131.  * Also define a yywrap.  Note that if we're using flex, it will
  132.  * define a macro to map this identifier to pcap_wrap.
  133.  */
  134. int
  135. yywrap()
  136. {
  137. return 1;
  138. }
  139. /* Hex digit to integer. */
  140. static inline int
  141. xdtoi(c)
  142. register int c;
  143. {
  144. if (isdigit(c))
  145. return c - '0';
  146. else if (islower(c))
  147. return c - 'a' + 10;
  148. else
  149. return c - 'A' + 10;
  150. }
  151. /*
  152.  * Convert string to integer.  Just like atoi(), but checks for
  153.  * preceding 0x or 0 and uses hex or octal instead of decimal.
  154.  */
  155. static int
  156. stoi(s)
  157. char *s;
  158. {
  159. int base = 10;
  160. int n = 0;
  161. if (*s == '0') {
  162. if (s[1] == 'x' || s[1] == 'X') {
  163. s += 2;
  164. base = 16;
  165. }
  166. else {
  167. base = 8;
  168. s += 1;
  169. }
  170. }
  171. while (*s)
  172. n = n * base + xdtoi(*s++);
  173. return n;
  174. }