• 使用ioctl扫描wifi信号获取AP的essid、mac地址等属性

    使用 wifi 是一件再平常不过的是事情,有很多 wifi 工具可以帮助你扫描附近的 wifi 信号,测试信号强度等,但如何通过编程来操作 wifi 却鲜有文章涉及;本文立足实践,不使用任何第三方库,仅使用 ioctl 扫描附近的 wifi 信号,并获取这些 AP 的 ESSID、MAC 地址、占用信道和工作频率,本文将给出完整的源程序,今后还会写一些文章讨论如果编程获取 wifi 信号的其它属性(比如:信号强度、加密方式等)的方法,敬请关注;本文程序在 ubuntu 20.04 下编译测试完成,gcc 版本号 9.4.0;阅读本文并不需要对 IEEE802.11 协议有所了解。 扫描 WIFI 信号显然是要操作无线网卡才能实现,通常情况下无线网卡的驱动程序是在内核空间的,用户空间的应用程序是无法直接控制驱动程序的;为了能够从用户空间控制无线网卡的驱动程序,我们在用户空间编写的程序需要与内核进程进行通信; 实现用户进程与内核通信的方式有很多,本文采用的是 ioctl,但还有其它方式,比如 netlink 等。

    0
    94
    853KB
    2023-08-14
    0
  • 使用SOCK-DGRAM类型的socket实现的ping程序

    SOCK_DGRAM类型的socket常用于UDP通信,本文将尝试把这种socket用于ICMP协议,并完成一个简单的ping程序。使用ping去测试某个主机是否可用可能是一件很平常的事,尽管ping非常普通,但是编写一个实现ping功能的程序却并不是那么简单,因为ping使用的ICMP协议并不是一个应用层协议,在网上看到的实现ping的例子大多使用raw socket去实现,不仅增加了解析IP报头的麻烦,而且还需要有root权限才能运行,本文简要介绍ICMP协议,并给出一个使用普通的常用于UDP通信的socket实现ping的实例,本文将提供完整的源程序,本文的程序在 Ubuntu 20.04 下测试通过,gcc 版本号 9.4.0;阅读本文需要熟悉socket编程,对初学者而言,本文有一定的难度。

    0
    82
    686KB
    2023-08-12
    0
  • 网络编程中如何用C语言实现的一个DNS客户端

    DNS可以帮助我们把域名映射到一个IP地址上,或者查询一个IP地址下有那些域名,使用域名访问一个网站或者服务器是一件很平常的事情,很少有人关心域名变成IP地址的实际过程,本文将使用C语言实现一个基本的DNS解析器,通过与DNS服务器的通信完成将一个域名转换成IP地址的过程,本文将提供完整的源程序;阅读本文需要有一定的网络编程基础,熟悉基本的socket编程并对DNS有一些了解,本文对网络编程的初学者难度较大。 在日常的网络活动中,有时会遇到DNS污染的困扰,比如在浏览器中输入域名,却无法到达我们期望到达的网站,这有时就是因为我们收到的DNS回应并不是来自一个合法的DNS服务器;当遇到此类问题时,本文的程序可以帮助你判断是否存在DNS污染。 如果一个网站没有完成备案,则使用域名访问时也无法到达该网站,这其实也是在DNS上做的文章。

    0
    140
    520KB
    2023-08-12
    0
  • 网络编程中使用tun虚拟网络接口建立IP隧道的实例

    通常的socket编程,面对的都是物理网卡,Linux下其实很容易创建虚拟网卡;本文简单介绍一下Linux虚拟网卡的概念,并以tun设备为例在客户端和服务器端分别建立一个实际的虚拟网卡,最终实现一个从客户端到服务器的简单的IP隧道,希望本文能对理解虚拟网卡和IP隧道有所帮助,本文将提供完整的源程序;阅读本文需要具备在Linux下使用C语言进行IPv4下socket编程的基本能力,本文对网络编程的初学者难度较大。 TUN和TAP是Linuxn内核的虚拟网络设备,不同于普通靠硬件网络适配器实现的设备,这些虚拟的网络设备全部用软件实现,并可以向运行于Linux上的应用软件提供与硬件的网络设备完全相同的功能; TUN模拟了网络层设备,操作第三层(网络层)数据包,通常我们使用的TCP/UDP报文在网络层使用的IP协议,所以使用TUN设备,需要自己构建IP报头和TCP/UDP报头; Linux通过TUN/TAP设备向绑定该设备的用户空间的应用程序发送数据;同样,用户空间的应用程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。

    0
    266
    841KB
    2023-08-11
    0
  • 路由表查找算法-最长前缀匹配的具体实现

    在Linux操作系统中,内核中有一个路由表,它包含若干条路由记录,这些记录由子网IP、子网掩码、网关IP和接口名等组成,这些信息用于将数据包转发到其他子网或者连接到互联网;本文介绍了当需要转发数据包时,Linux内核查找路由表的基本算法,并用程序模拟了这个过程,附有完整的源代码。本文对网络编程的初学者难度不大。 当我们在Linux系统下发送一个报文时,Linux需要确定路由,也就是将这个报文转发到哪个网络接口下的哪个设备上去,一个连接在网络上的Linux系统至少有两个网络接口,一个是网卡(有线或者无线网卡),一个loopback,Linux从报文中的IP报头中获得目的IP地址,以这个目的IP地址为依据从系统内部的路由表中找到一条最适合的路由,然后将报文转发到这个路由上,在查找路由表的过程中会使用一个叫做"最长前缀匹配(Longest Prefix Match)" 的算法来确定路由;本文将简要介绍Linux系统中的路由表、路由策略以及路由决策的过程,介绍"最长前缀匹配(Longest Prefix Match)"算法,并提供一个完整的源代码来模拟这个算法在路由查找中的应用。

    0
    534
    472KB
    2023-08-11
    0
  • 使用SNTP协议从时间服务器同步时间

    在互联网上校准时间,是几乎连接在互联网上的每台计算机都要去做的事情,而且很多是在后台完成的,并不需要人工干预;互联网上有很多时间服务器可以发布精确的时间,计算机客户端使用NTP(Network Time Protocol)协议与这些时间服务器进行时间同步,使本机得到精确时间,本文简要描述了NTP协议的原理,对NTP协议的时间同步精度做了简要分析,并具体实现了SNTP(Simple Network Time Protocol)下的客户端,本文附有完整的C语言SNTP客户端的源程序。阅读本文只需掌握基本的socket编程即可,本文对网络编程的初学者难度不大。

    0
    113
    553KB
    2023-08-10
    0
  • 网络编程中如何使用raw socket发送magic packet网络唤醒数据包实现远程唤醒

    Magic Packet是进行网络唤醒的数据包,将这个数据包以广播的形式发到局域网上,与数据包中所关联的MAC相同的电脑就会被唤醒开机,通常我们都是使用UDP报文的形式来发送这个数据包,但实际上在进行网络唤醒的时候,只要报文中包含Magic Packet应该就可以唤醒相关的计算机,与IP协议、UDP协议没有任何关系,本文将试图抛开网络层(IP层)和传输层(TCP/UDP层),直接在数据链路层发出Magic Packet,并成功实现网络唤醒,本文将提供完整的源代码。阅读本文需要有较好的网络编程基础,本文对网络编程的初学者有一定难度。

    0
    60
    407KB
    2023-08-10
    0
  • 如何用C语言操作arp cache

    arp cache中存放着局域网内IP地址和MAC地址的对应关系,对socket通信是至关重要的,arp cache由Linux内核进行维护,本文介绍如何用ioctl获取arp cache记录,添加新记录到arp cache中,删除arp cache中记录,每一种操作均给出了完整的源程序,本文程序在ubuntu 20.4中编译运行成功,gcc版本9.4.0,阅读本文需要有基本的socket编程和ioctl的知识,并对ARP协议有所了解,本文对网络编程的初学者难度不大。

    0
    58
    530KB
    2023-08-10
    3
  • linux下使用netlink获取gateway的IP地址

    要在linux下的程序中获取gateway的IP地址,使用netlink是一种直接、可靠的方法,不需要依赖其它命令,直接从linux内核获取信息,netlink编程的中文资料很少,本文试图用尽可能简单的方式讨论使用netlink获取gataway的IP地址的编程方法,并有大量篇幅介绍netlink的相关数据结构和编程方法,阅读本文需要对linux下编程有一定了解,熟悉IPv4的socket编程;本文对网络编程的初学者有较大难度。

    0
    169
    612KB
    2023-04-23
    3
  • 从proc文件系统中获取gateway的IP地址

    在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有 ip route或者 route -n,route -n 是通过读取proc文件系统下的文件来从内核获取路由表的,但 ip route 是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路由表中获取gateway的IP地址,文章最后给出了完整的源程序,本文对初学者基本没有难度。

    0
    86
    516KB
    2023-04-23
    3
码龄20年
已实名
  • 持之以恒

    授予累计2个月发布8篇原创IT博文的用户
  • 勤写标兵

    授予累计3周发布3篇原创IT博文的用户
  • 话题达人

    参与话题个数=1
  • 笔耕不辍

    累计1年每年原创文章数量>=20篇
  • 创作能手

    授予每个自然周发布7篇到8篇原创IT博文的用户
  • 新秀勋章

    用户首次发布原创文章,审核通过后即可获得
  • 持续创作

    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
关注 私信
上传资源赚积分or赚钱