linux网络编程(2)

底层网络编程底层的编程主要是和TCP/IP协议紧密关联的,比如设置IP头信息,设置TCP、UDP头信息,设置ICMP数据包,ARP地址解析协议等。这一切能够实现的基础就是SOCK_RAW–原始套接字。原始套接字的使用对于学习和掌握TCP/IP协议时非常有帮助的。总的来说,有两种用法:

Socket(AF_INET, SOCK_RAW, IPPROTO_TCP); // IPPROTO_UDP, IPPROTO_ICMP等
Socket(AF_INET,SOCK_RAW,ETH_P_ALL); // ETH_P_ARP ; ETH_P_RARP等

这里的第一类用法主要用在组装传输层的数据包上使用。比如组装一个ICMP数据包,用来实现Ping程序。这一层次的调用不关心ip数据头的信息,只关心ip头以上的信息。至于ip数据头以及以太网数据头的信息由系统来组装。使用sockaddr_in结构来指明组装的ip头。但是注意此时的sockaddr_in结构体中的端口号是不起作用的。另外还需要注意的是这种方法收取到的数据是没有被剥离ip头部的。必须手动进行剥离,才能读取到需要的数据。

使用这种方法虽然由系统自己组装了IP头,然而还是可以通过一定的方法来强制的设置IP头的。该方法就是setsockopt方法。如下列举:
Setsockopt(socket_fd IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl)); //设置TTL
Setsockopt(seock_fd,IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(tos)); //设置TOS服务
Setsockopt(sock_fd, IPPROTP_IP, IP_OPTIONS, ,); // 设置IP选项
Setsockopt(sock_fd, IPPROTO_IP, IP_H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值