udpdump.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:1k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* UDP packet tracing
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include <stdio.h>
  5. #include "global.h"
  6. #include "mbuf.h"
  7. #include "netuser.h"
  8. #include "internet.h"
  9. #include "udp.h"
  10. #include "ip.h"
  11. #include "socket.h"
  12. #include "trace.h"
  13. /* Dump a UDP header */
  14. void
  15. udp_dump(fp,bpp,source,dest,check)
  16. FILE *fp;
  17. struct mbuf **bpp;
  18. int32 source,dest;
  19. int check; /* If 0, bypass checksum verify */
  20. {
  21. struct udp udp;
  22. struct pseudo_header ph;
  23. uint16 csum;
  24. if(bpp == NULL || *bpp == NULL)
  25. return;
  26. fprintf(fp,"UDP:");
  27. /* Compute checksum */
  28. ph.source = source;
  29. ph.dest = dest;
  30. ph.protocol = UDP_PTCL;
  31. ph.length = len_p(*bpp);
  32. if((csum = cksum(&ph,*bpp,ph.length)) == 0)
  33. check = 0; /* No checksum error */
  34. ntohudp(&udp,bpp);
  35. fprintf(fp," len %u",udp.length);
  36. fprintf(fp," %u->%u",udp.source,udp.dest);
  37. if(udp.length > UDPHDR)
  38. fprintf(fp," Data %u",udp.length - UDPHDR);
  39. if(udp.checksum == 0)
  40. check = 0;
  41. if(check)
  42. fprintf(fp," CHECKSUM ERROR (%u)",csum);
  43. putc('n',fp);
  44. switch(udp.dest){
  45. case IPPORT_RIP:
  46. rip_dump(fp,bpp);
  47. }
  48. }