用Ethereal协议分析系统介绍 && Ethereal支持的常用协议端口号

【用Ethereal协议分析系统介绍】

 

Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Ethereal添加新的协议解析器,如今Ethereal已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Ehereal良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。

  1 Ethereal的捕包平台

  网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

  在Linux系统中, 1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进

  在window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows

  系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。

  Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包

  2 层次化的数据包协议分析方法

  取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层

  Ip

  | /

  Tcp udp

  | /

  HTTP TFTP

  由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。上图就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。 Tcp.port=21就可以认为是ftp协议, 特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。

  在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。

  这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。

  由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

  3 基于插件技术的协议分析器

  所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它著名的应用实例有:媒体播放器winamp、微软的网络浏览器ie等。

  由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。

  在协议分析器中新增加一个协议插件一般需要插件安装或者注册,插件初始化,插件处理3个步骤,下面以Ethereal为例进行分析如何利用插件技术新增加一个协议分析模块。

  Ethereal由于采用插件技术,一个新加入开发的程序员开发一种新的协议分析模块的时候不需要了解所有的代码,他只需要写好这个协议模块的函数后,写一个格式为proto_reg_handoff_XXX的函数,在函数内调用注册函数告诉系统在什么时候需要调用这个协议模块。比如

  你事先写好了一个名为dissect_myprot的协议解析模块,它是用来解析tcp协议端口为250的数据。可以利用这些语句来将这个解析器注册到系统中

  proto_reg_handoff_myprot(void)

  {

  dissector_handle_t myprot_handle;

  myprot_handle = create_dissector_handle(dissect_myprot,

  proto_myprot);

  dissector_add("tcp.port", 250, myprot_handle);

  }

  这段代码告诉系统当tcp协议数据流端口为250的时候要调用dissect_myprot这个函数模块。

  在Ethereal中有一个角本专门来发现开发者定义的类式proto_reg_handoff_xxx这样的注册函数名,然后自动生成调用这些注册函数的代码。这样开发者不需要知道自己的注册函数如何被调用的。这样一个新的协议分析模块就加入到系统中了。

  由于采用了插件方式,Ethereal良好的结构设计让开发者只需要关系自己开发的协议模块,不需要关心整个系统结构,需要将模块整合进系统只需要写一个注册函数即可,连初始化时调用这个注册函数都由脚本自动完成了。正是因为有很好的体系结构,这个系统才能够开发出如此多的协议解析器

  尽管Ethereal是目前最好的开放源码的网络分析系统,但Ethereal仍然有一些可以改进的地方,一个优秀的网络分析器,尽可能的正确分析出数据协议和高效的处理数据是两个重要的指标。在协议识别方面Ethereal大多采用端口识别,有少量协议采用内容识别。这就让一些非标准端口的协议数据没有正确解析出来。比如ftp协议如果不是21端口的话,Ethereal就无法识别出来,只能作为tcp数据处理。另外对于内容识别式。Ethereal是将所以内容识别的函数组成一张入口表。每次协议数据需要内容识别时,按字母顺序逐个调用表里的每个识别函数。比如对于识别yahoo massanger协议。主要是看数据前几个字节是不是’ymsg’.由于协议名为y开头。所以当识别出协议时已经把所有内容识别函数调用了一遍。这些都是由于Ethereal没有实现tcp协议栈,无法做到流级别的识别。导致在协议识别方面有点缺陷。

 

【Ethereal支持的常用协议端口号】

 TCP协议支持
协议名称 TCP端口号 协议名称解释

  

  ACAP 674

  AIM 5190

  BEEP 10288

  CAST 4224

  CMP 829

  COPS 3288

  PKTCABLE_COPS 2126

  PKTCABLE_MM_COPS 3918

  DAAP 3689

  DHCPFO 519

  DIAMETER 3868

  DISTCC 3632

  DLSW 2065

  NP 20000

  NS 53

  DNS 5353

  DSI 548

  FTPDATA 20

  FTP 21

  GIFT 1213

  CS 1720

  HTTP 80

  PROXY_HTTP 3128

  PROXY_ADMIN_HTTP 3132

  HKP 11371

  DAAP 3689

  SSDP 1900

  IB 3050

  ICAP 1344

  IMAP 143

  IRC 6667

  ISAKMP 500

  JABBER 5222

  KERBEROS 88

  LAPLINK 1547

  LDAP 389

  GLOBALCAT_LDAP 3268

  LDP 646

  PRINTER 515

  MBTCP 502

  MSNMS 1863

  MSRP 0

  MySQL 3306

  NBSS 139

  CIFS 445

  NCP 524

  NDMP 10000

  PA 0x0d44

  BROKER 0x0bc6

  SRS 0x0bca

  ENS 0x0bc8

  RMS 0x0bcb

  NOTIFY_LISTENER 0x0bc9

  NETSYNC 5253

  NNTP 119

  NTP 123

  POP 110

  PPTP 1723

  PVFS2 3334

  RMI 1099

  RSH 514

  RSYNC 873

  RTSP 554

  SIP 5060

  SKINNY 2000

  SLSK_1 2234

  SLSK_2 5534

  SLSK_3 2240

  SMRSE 4321

  SMTP 25

  SNMP 161

  SNMP_TRAP 162

  SMUX 199

  SOCKS 1080

  SRVLOC 427

  SSH 22

  SSL 443

  SSL_LDAP 636

  SSL_IMAP 993

  SSL_POP 995

  STUN 3478

  TACACS 49

  TELNET 23

  TNS 1521

  TPKT 102

  X11 6000

  X11_2 6001

  X11_3 6002

  XOT 1998

  YHOO 5050

  YMSG 23

  YMSG_2 25

  YMSG_3 5050

  ZEBRA 2600

  NINEPORT 564

  ajp13 8009

  ax4000 3357

  BGP 179

  COPS 3288

  DCM 104

  DHCPFO 519 desegmentation of DHCP failover over TCP

  distcc 3632

  ECHO 7

  edonkey 4661/4662/4663

  ENIP_ENCAP_PORT 44818 EtherNet/IP located on port 44818

  etheric 1806/10002

  giop 0

  GNUTELLA 6346

  http_alternate_tcp_port 未知

  Ipdc 6668

  ISNS 3205

  MSMMS 1755

  msdp 639

  MSNMS 1863

  msrp 0

  Pgsql 5432

  Rlogin 513

  Rpc 111

  rtsp 未知

  Sigcomp 5555/6666

  synergy 24800

  tds 1433/2433

  uma 0

  vnc 5901

  一共129=94+35种

  UDP协议支持

  协议名称 UDP端口号 协议名称解释

  3GA11 699 3com Network Jack

  5264:Packets to Managementstation

  5265:Packets to Switch

  ACTRACE 2428 Port used for Mobile IP based Tunneling Protocol (A11)

  T_AODV 654

  ARMAGETRONAD 4534

  MASTER 4533

  ADP 8200

  PIM_RP_DISC 496

  BFD_CONTROL 3784

  BOOTPS 67

  BOOTPC 68

  PHA 8116

  CUPS 631

  DDTP 1052

  DHCPV6_DOWNSTREAM 546

  DHCPV6_UPSTREAM 547

  DLSW 2067

  DNP 20000

  DNS 53

  MDNS 5353

  RAS1 1718

  RAS2 1719

  HSRP 1985

  SSDP 1900

  IAPP 2313

  ICP 3130

  ICQ 4000

  IPX 213

  ISAKMP 500

  KERBEROS 88

  KRB4 750

  KPASSWD 464

  L2TP 1701

  LAPLINK 1547

  CLDAP 389

  LDP 646

  LLC1 12000

  LLC2 12001

  LLC3 12002

  LLC4 12003

  LLC5 12004

  LMP_DEFAULT 701

  MIP 434

  MPLS_ECHO 3503

  MSPROXY 1745

  NBNS 137

  NBDGM 138

  NCP 524

  NETFLOW 2055

  TPCP 3121

  NTP 123

  OLSR 698

  RADIUS 1645

  RADIUS_NEW 1812

  RADACCT 1646

  RADACCT_NEW 1813

  RIP 520

  RIPNG 521

  RMCP 623

  RMCP_SECURE 664

  RX_LOW 7000

  RX_HIGH 7009

  RX_AFS_BACKUPS 7021

  SAP 9875

  SEBEK 1101

  SFLOW 6343

  SIP 5060

  SLIMP3_V1 1069

  SLIMP3_V2 3483

  SNMP 161

  SNMP_TRAP 162

  SRVLOC 427

  STUN 3478

  SYSLOG 514

  TACACS 49

  TEREDO 3544

  TFTP 69

  TIME 37

  TIMED 525

  TZSP 0x9090

  VINES 573

  WSP 9200

  WTP_WSP 9201

  WTLS_WSP 9202

  WTLS_WTP_WSP 9203

  WSP_PUSH 2948

  WTLS_WSP_PUSH 2949

  WCCP 2048

  WHO 513

  XDMCP 177

  XYPLEX 173

  NJACK1 5264

  NJACK2 5265

  ASAP 3863

  AX4000 3357

  bvlc 0xBAC0

  CPFI 5000

  cpfi_ttot 5001

  dis 3000

  ECHO 7

  edonkey 4665

  edonkey 4672

  ENIP_ENCAP 44818

  ENIP_IO 2222

  IAX2 4569

  udpencap 4500

  IPVS_SYNCD 8848

  ISNS 3205

  KINK 57203

  lwapp 12220/12222/12223

  manolito 41170

  MSMMS 1755

  udp_encap_ucast_port 3055 Udp port for UDP encapsulation

  udp_encap_mcast_port 3056

  PKTC_PORT 1293

  PKTC_MTAFQDN_PORT 2246

  EVENT_PORT_PTP 319

  GENERAL_PORT_PTP 320

  radius 0 这个好像不对

  Rpc 111

  SigCompUDPPort1 5555

  SigCompUDPPort2 6666

  Rdt 6970

  rmt-alc 未知 从配置文件中读取

  SSCOP 未知 从配置文件中读取

  T38 6004

  quakeworldServerPort 27500

  quakeServerPort 26000

  quake2ServerPort 27910

  quake3_server_port 27960-27963

  quake3_master_port 27965-27968

  一共137=90+47种

  IP协议支持

  协议名称 IP端口号 协议名称解释

  AX4000 173 AX/4000 Testblock - non IANA

  TP 29 ISO Transport Protocol Class 4

  DCCP 33 Sequential Exchange Protocol(和标准的不一样)

  EIGRP 88

  EtherIP 97 Ethernet-within-IP Encapsulation

  GRE 47 General Routing Encapsulation

  ICMPV6 58 ICMP for IPv6

  IGMP 2

  IGRP 9 any private interior gateway(used by Cisco for their IGRP)

  IPIP 4 IP in IP (encapsulation)

  ICMP 1

  AH 51 Authentication Header

  ESP 50 Encap Security Payload

  IPCOMP 108 IP Payload Compression Protocol

  IPV6 41

  L2TP 115 Layer Two Tunneling Protocol

  MIPV6_OLD 62 CFTP 这个和标准不一致――Mobile IPv6

  MIPV6 135 Mobility Header ―― Mobile IPv6

  NCS_HEARTBEAT 224 Novell NCS Heartbeat -

  http://support.novell.com/cgi-bin/search/searchtid.cgi?/10071158.htm

  NARP 54 NBMA Address resolution protocol - RFC1735

  OSPF 89

  PGM 113 PGM Reliable Transport Protocol

  PIM 103 Protocol Independent Multicast

  RSVP 46

  SCTP 132 Stream Control Transmission Protocol

  TCP 6

  UDP 17

  UDPLITE 136 UDPLite

  VINES 83 Vines over raw IP

  VRRP 112 Virtual Router Redundancy Protocol

  一共30种

Ethereal is a GUI network protocol analyzer. It lets you interactively browse packet data from a live network or from a previously saved capture file. See: http://www.ethereal.com for new versions, documentation, ... Ethereal's native capture file format is libpcap format, which is also the format used by tcpdump and various other tools. So Ethereal can read capture files from: -libpcap/WinPcap, tcpdump and various other tools using tcpdump's capture format -snoop and atmsnoop -Shomiti/Finisar Surveyor captures -Novell LANalyzer captures -Microsoft Network Monitor captures -AIX's iptrace captures -Cinco Networks NetXRay captures -Network Associates Windows-based Sniffer captures -Network General/Network Associates DOS-based Sniffer (compressed or uncompressed) captures -AG Group/WildPackets EtherPeek/TokenPeek/AiroPeek/EtherHelp/PacketGrabber captures -RADCOM's WAN/LAN analyzer captures -Network Instruments Observer version 9 captures -Lucent/Ascend router debug output -files from HP-UX's nettl -Toshiba's ISDN routers dump output -the output from i4btrace from the ISDN4BSD project -traces from the EyeSDN USB S0. -the output in IPLog format from the Cisco Secure Intrusion Detection System -pppd logs (pppdump format) -the output from VMS's TCPIPtrace/TCPtrace/UCX$TRACE utilities -the text output from the DBS Etherwatch VMS utility -Visual Networks' Visual UpTime traffic capture -the output from CoSine L2 debug -the output from Accellent's 5Views LAN agents -Endace Measurement Systems' ERF format captures -Linux Bluez Bluetooth stack hcidump -w traces There is no need to tell Ethereal what type of file you are reading; it will determine the file type by itself. Ethereal is also capable of reading any of these file formats if they are compressed using gzip. Ethereal recognizes this directly from the file; the '.gz' extension is not required for this purpose.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值