当前位置:  技术问答>linux和unix

帮忙看下,我找了很久没发现错误在哪里?

    来源: 互联网  发布时间:2016-11-01

    本文导语:  我自己构建一个ip包,放入某段内存,再读出来。 有三个文件: #1 : ip_packet.h #2 :  ip_packet.c #3 :  main.c 编译命令为: gcc -g -ansi -Wall -Werror -o2 ip_packet.c main.c -o main.out 运行 ./main.out 之后有错误,Segmentation...

我自己构建一个ip包,放入某段内存,再读出来。
有三个文件:
#1 : ip_packet.h
#2 :  ip_packet.c
#3 :  main.c

编译命令为: gcc -g -ansi -Wall -Werror -o2 ip_packet.c main.c -o main.out
运行 ./main.out 之后有错误,Segmentation fault

gdb  main.out 
再run,提示在ip_hdr_init()函数,
可是没发现什么错误啊。

代码如下:
ip_packet.h

#ifndef __IP_PACKET_H
#define __IP_PACKET_H

#if !defined( LITTLE_ENDIAN) 
#define  LITTLE_ENDIAN 0
#else
#undef  LITTLE_ENDIAN
#define  LITTLE_ENDIAN 0
#endif

#if !defined(BIG_ENDIAN) 
#define  BIG_ENDIAN    1
#else
#undef  BIG_ENDIAN
#define  BIG_ENDIAN    1
#endif

#if !defined(BYTE_ORDER)
#define  BYTE_ORDER  LITTLE_ENDIAN
#else
#undef BYTE_ORDER
#define  BYTE_ORDER  LITTLE_ENDIAN
#endif

#define MAX_OCTETS_NUM  576
#define MIN_HDR_WORD_SIZE     5  /* in word */
#define MIN_HDR_BYTE_SIZE     (5  MIN_HDR_SIZE ? 1 :0)
#define option_size(ip_hdr_p) ((ip_hdr_p)->(ip_ihl) ^ 5)

struct in_addr 
{
unsigned long s_addr;
};

typedef struct ip_hdr
{
#ifdef _IP_VHL
unsigned char ip_vhl; /* version and ivh */
#else 
#if BYTE_ORDER == LITTLE_ENDIAN
unsigned char ip_ihl; /* internet heder length */
unsigned char ip_v; /* IP Version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
unsigned char ip_v;
unsigned char ip_ihl;
#endif 
#endif
unsigned char ip_tos; /* type of service */
unsigned short ip_len; /* total length */
unsigned short ip_id; /* identification */
unsigned short ip_off; /* fragment offset */
unsigned char  ip_ttl; /* time to live */
unsigned char  ip_p;   /* protocol */
unsigned short ip_sum; /* ip header checksum */
struct in_addr ip_src; /* ip source address */
struct in_addr ip_dst; /* ip dest address */
}IP_HDR;

typedef IP_HDR *IP_HDR_ID;
#ifdef _IP_VHL
#define  IP_MAKE_VHL(v, hl)  ((v)  4)
#endif
/*
int inet_aton(char *cp, struct in_addr *inp);
struct in_addr inet_addr(char *cp);
struct in_addr inet_network(char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(int net, int host);
struct in_addr inet_lnaof(struct in_addr in);
struct in_addr inet_netof(struct in_addr in);
*/
char itoa(int digit);
IP_HDR_ID ip_hdr_init(IP_HDR_ID ip_hdr_p);
char* ip_cons(char* pbuf, IP_HDR_ID ip_hdr_p);
void print(char* pbuf, IP_HDR_ID ip_hdr_p);
#endif


ip_packet.c

#include 
#include 
#include 
#include "ip_packet.h"
char itoa(int digit)
{
return (digit + '0');
}


IP_HDR_ID ip_hdr_init(IP_HDR_ID ip_hdr_p)
{       
ip_hdr_p->ip_ihl  = 15; 
ip_hdr_p->ip_v    = 4;
ip_hdr_p->ip_tos  = 10;
ip_hdr_p->ip_len  = 556;
ip_hdr_p->ip_id   = 1121;
ip_hdr_p->ip_off  = 128;
ip_hdr_p->ip_ttl  = 16;
ip_hdr_p->ip_p    = 80;
ip_hdr_p->ip_sum  = 16388;
ip_hdr_p->ip_src.s_addr =101519663;
ip_hdr_p->ip_dst.s_addr =101619664;
        
printf(" why notn");
return ip_hdr_p;
 }


char* ip_cons(char* pbuf, IP_HDR_ID ip_hdr_p)
{
IP_HDR_ID tmp_ip_hdr_p;
char*  pTupBuf;
pTupBuf = pbuf;
tmp_ip_hdr_p = ip_hdr_p;
unsigned int padding_word_num;
unsigned int data_byte_len;
unsigned int pos = 0;
unsigned int digit = 0;
char *str, *tmp_str;
        tmp_str = NULL;
padding_word_num = tmp_ip_hdr_p->ip_ihl - MIN_HDR_WORD_SIZE;
data_byte_len = tmp_ip_hdr_p->ip_len - (tmp_ip_hdr_p->ip_ihl ip_v);
                            printf(" ip: ihl     = %hun", rcv_ip_hdr_p->ip_ihl);
                            printf(" ip: tos     = %hun", rcv_ip_hdr_p->ip_tos);
                            printf(" ip: len     = %hun", rcv_ip_hdr_p->ip_len);
                            printf(" ip: id      = %hun", rcv_ip_hdr_p->ip_id);
                            printf(" ip: off     = %hun", rcv_ip_hdr_p->ip_off);
                            printf(" ip: ttl     = %hun", rcv_ip_hdr_p->ip_ttl);
                            printf(" ip: p       = %hun", rcv_ip_hdr_p->ip_p);
                            printf(" ip: sum     = %hun", rcv_ip_hdr_p->ip_sum);
                            printf(" ip: src     = %lun", rcv_ip_hdr_p->ip_src.s_addr);
                            printf(" ip: dst     = %lun", rcv_ip_hdr_p->ip_dst.s_addr);
        padding_word_num = rcv_ip_hdr_p->ip_ihl - MIN_HDR_WORD_SIZE;
        data_byte_len = rcv_ip_hdr_p->ip_len - (rcv_ip_hdr_p->ip_ihl 

    
 
 

您可能感兴趣的文章:

  • 怎么找到这个错误???大侠帮忙!
  • 关于全选的错误,希望各位帮忙!!!!
  • SSL_connect返回的错误Resource temporarily unavailable,请大家帮忙,很急......
  • 大家帮忙看看错误如何解决
  • linux高手请帮忙,系统崩溃,段错误!!!
  • 帮忙看看下面错误,怎样解决!!!
  • 高手帮帮忙,编译错误,在线等
  • 请帮忙看看连接错误,急救!!!
  • 发布Applet出现的错误,帮忙撒
  • linux出现内核错误,请各位前辈帮忙分析
  • ●帮忙看看这个错误是什么
  • 关于查询结果集异常错误的问题,谢谢帮忙!
  • 帮忙:我要改Linux下的apache服务器显示404错误的文件,怎么改呀?
  • 帮忙看看这是个什么错误啊?
  • 在Linux下面编译出现以下错误,请帮忙看看是什么原因,多谢了
  • 小小shell脚本错误,帮忙修改!
  • linux登录错误!帮忙解决啊
  • 编译执行spserver时候遇到的错误,帮忙看看
  • 请帮忙解析tomcat错误
  • 请帮忙看看这个编译错误信息是什么意思,该怎么修改?谢谢
  • 高手帮帮忙!!! 在线等!!outlook的附件修改且保存后,再次打开发现是修改之前的原件
  • 刚装了redhat Linux9,进入csdn发现左边的目录是乱码,我是新手请大家帮帮忙,谢谢!
  • 载完rh7.3的三个iso 文件~ 用winios打开后~ 没有发现setup.exe文件~ 大吓帮忙指点一二~
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 努力努力再努力,帮忙帮忙来帮忙!
  • 在servlet中有一个关于单引号输出的问题,请大家帮忙,帮忙,帮帮忙!!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 帮忙帮忙如何设置变量pathclass
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 帮帮忙!SCO OpenServer 5.0.5 的root用户口令丢了,怎么找回来啊,帮帮忙!!!!!!
  • 我用smartupload组件遇到问题了,请帮忙!!
  • webmail问题,请高手帮忙!!!谁会使用IMP 3.0????!!!
  • 脚本问题,帮忙
  • 高手帮忙解释
  • 求教求教,shell问题...各位大哥,帮忙下
  • 帮忙看看下面错误,怎样解决!!! iis7站长之家
  • DELL服务器,安装RedHat EAS3.0,装完了,连不上SSH。。。。。哪位大虾帮忙!!急啊 !!!!
  • 关于聊天室的若干疑问!!!请各位大虾帮忙!
  • 有个问题?请帮忙!
  • 请求各位帮忙,关于绘制图像
  • 关于全选的问题大家帮忙看看~
  • 帮忙找个工作。
  • 请帮忙推荐几个下载java电子书的网站,35分献上!
  • 我怎么不能编译servlet?请帮忙!!!谢谢!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3