原始套接字之简易通信实例

这篇博客介绍了如何利用原始套接字在服务端和客户端进行通信。服务端通过创建非阻塞socket,设置过滤协议,并在循环中处理发送和接收数据。客户端则创建socket并接收数据进行处理。虽然通信机制简单,但可以扩展到ARP嗅探、扫描和简易网络协议。提供了部分代码参考。
摘要由CSDN通过智能技术生成

 

#define APLETHTYPE  0x9527

关于发包时ifindex的获取,组包时的一些大小端处理这些可能需要注意一下,处理时调试时可以更新

服务端:

1,创建socket ,htons(APLETHTYPE)过滤指定协议发送接收。

    if ( (sockfd = socket(PF_PACKET, SOCK_RAW, htons(APLETHTYPE) ))== -1 )
    {
        perror("socket");
        return 1;
    }

2,设置非阻塞方式(根据实际通信而定)

    if (set_nonblocking(sockfd) < 0)
    {
        printf("setNonBlocking\n");
        return ERR_APL;
    }

3,在死循环中,对发包和收包进处理

    while(1)
    {   
        apl_init_gw_broadcast(sockfd);//发包打包函数
        n = recv(sockfd, buf, sizeof(buf), 0);//收包函数
        apl_gw_pkt_process(buf);//
    }

客户端

1,直接创建socket,然后进行收包,处理回包

    if ((sockfd = socket(PF_PACKET,SOCK_RAW,htons(APLETHTYPE)))== -1)
    {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值