0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用康文管理Linux设备上的互联网连接

星星科技指导员 来源:嵌入式计算设计 作者: Harish Jenny 2022-10-20 14:50 次阅读

连接管理器 (ConnMan) 是一个连接管理守护程序 (connmand),用于管理运行 Linux 操作系统的设备内的互联网连接。它提供低内存消耗,对不断变化的网络条件做出快速、一致、同步的反应。

ConnMan具有各种插件,是一个完全模块化的系统,可以扩展以支持各种有线或无线技术。插件方法允许针对各种用例轻松进行调整和修改。DHCP 和域名解析等配置方法是使用插件实现的。

所有应用程序都应使用 D-Bus 与康曼通信。它与嵌入式Yocto构建系统一起使用,是GENIVI车载信息娱乐规范的一部分。

康文在 GPL v2.0 许可证下分发。英特尔是康曼项目的主要贡献者。

康曼建筑

康曼内部基础设施

功能和特性

连接管理器中内置了以下功能:

  • 通用插件基础架构
  • 设备和网络抽象(具有基本存储支持)
  • IPv4、IPv4-LL(链路本地)和 DHCP - IPv6、DHCPv6 和 6to4 隧道
  • 高级路由和 DNS 配置
  • 内置 DNS 代理和智能缓存
  • 内置 WISPr 热点登录和门户检测
  • 时间和时区配置(手动和自动使用 NTP)
  • 代理处理(手动和自动使用 WPAD)
  • 网络共享支持(USB蓝牙和无线网络接入点模式)
  • 详细的统计信息处理(家庭和漫游)

可以为网络支持启用各种插件:

  • 以太网插件
  • 具有 WEP40/WEP128 和 WPA/WPA2(个人和企业)的无线插件
  • 蓝牙插件(使用蓝牙Z)
  • 2G/3G/4G 插件(使用网络)

还具有附加功能的普金斯:

  • 环回接口设置
  • PACrunner 代理处理
  • 策略工具包授权支持

康曼 D-总线接口

D 总线接口

  • 应用程序应使用 D-Bus 与康曼通信。
  • 主入口点通过管理器对象。
  • 管理器对象包含对服务对象的引用(接口)。
  • 其他接口包括 VPN、时钟、任务、技术、会话、通知、对等、代理和计数器。

管理器 D 总线接口

  • 应用程序入口点是管理器对象
  • 解释了所有方法和属性

管理器属性

检索所有全局属性的简单方法如下所示:

  • 总线 = 数字总线。系统总线()
  • 管理器 = 总线。Interface(bus.get_object(“net.connman”, “/”), “net.connman.Manager”)
  • 属性 = 管理器。获取属性()

更改全局属性也非常简单。例如,启用所谓的脱机模式(AKA 飞行模式)就足以设置该属性:管理器。SetProperty(“OfflineMode”, dbus.布尔值(1))。

服务接口

高级界面使用户界面可以轻松访问网络详细信息和用户选择的首选项。这是服务列表和接口。ConnMan 维护着一个包含所有可用服务的平面和排序列表。

服务订单

Servicestates

  • 每个服务的基本状态都是“空闲”。这意味着此服务目前根本没有在使用中。它也没有尝试连接或执行任何其他操作。
  • “关联”状态表示此服务尝试建立与网络的低级连接 - 例如,与WiFi接入点关联/连接。
  • 在“配置”状态下,服务指示它正在尝试检索/配置 IP 设置。
  • “就绪”状态表示设备已成功连接。这并不意味着它具有默认路由,但基本 IP 操作将成功。
  • 在“断开连接”状态下,服务指示它将终止当前连接,并将返回到“空闲”状态。
  • 此外,“失败”状态表示错误行为。它类似于“空闲”状态,因为服务未连接。

服务 D 总线接口

下面介绍如何获取服务对象:

-properties = manager.GetProperties() -for path in properties["Services"]: service = dbus.Interface(bus.get_object("net.connman", path), "net.connman.Service")

它还包含连接或断开特定服务的方法。ConnMan 还可以根据他的策略或通过外部事件(如插入以太网电缆)自动连接服务。手动连接(或断开)特定服务就像告诉它一样简单。

connect: service.Connect() or service.Disconnect()

服务属性

技术接口

基本的设备配置任务由技术接口完成。例如,打开和关闭设备(例如通过RFKILL)应通过技术接口完成。

技术特性

用户可以通过管理器脱机模式属性激活脱机(飞行)模式。在离线模式下,包括以太网在内的所有技术都已关闭电源。在脱机模式下,用户可以通过使用 rfkill 命令或某些便携式计算机中的 Fn-Fx 组合键,通过“技术支持”属性临时激活单个技术。

康曼内部

启动连接

选项:

-c, --config=FILE Load the specified configuration file instead of /usr/local/etc/connman/main.conf -d, --debug=DEBUG Specify debug options to enable -i, --device=DEV Specify networking device or interface -I, --nodevice=DEV Specify networking interface to ignore -p, --plugin=NAME,... Specify plugins to load -P, --noplugin=NAME,... Specify plugins not to load -W, --wifi=NAME Specify driver for WiFi/Supplicant -n, --nodaemon Don't fork daemon to background -r, --nodnsproxy Don't enable DNS Proxy --nobacktrace Don't print out backtrace information

用法示例:

# CONNMAN_SUPPLICANT_DEBUG=1 connmand -n -d &> connman.log #connmand -i wlan0 -I eth0 --nodnsproxy --nodaemon >& connman.log

主配置文件

主要.conf

InputRequestTimeout = 120 (default)---------> input request ( ex. passphrase) timeout BrowserLaunchTimeout = 300 ( default) -----> The request for launching a browser for portal pages BackgroundScanning = true --------------------> option for background scanning FallbackTimeservers = --------------------------> List of fallback timeservers ( used by NTP sync) separated by "," FallbackNameservers = -------------------------> List of fallback nameservers DefaultAutoConnectTechnologies = -----------> List of technologies that are marked autoconnectable by default. PreferredTechnologies = ------------------------> List of preferred technologies from - most preferred one to least preferred NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,ve-,vb- ---> List of blacklisted network interfaces AllowHostnameUpdates = true -----------------> Allow connman to change the system hostname ( ex. dhcp hostname option) SingleConnectedTechnology = false -----------> Keep only a single connected technology at any time TetheringTechnologies = wifi,bluetooth,gadget PersistentTetheringMode = false --------------> Restore earlier tethering status when returning from offline mode Enable6to4 = false ------------------------------> Automatically enable Anycast 6to4 if possible (not recommended. see RFC6343 ) EnableOnlineCheck = false --------------------> Enable use of http get as on online status check AlwaysConnectedTechnologies = -------------> List of technologies with AutoConnect = true which are always connected regardless of PreferredTechnologies setting

康曼配置文件

康曼使用配置文件来配置现有服务。康曼将在 /var/lib/康曼/ 中寻找其配置文件。配置文件名不得包含字母或数字以外的其他字符,并且必须具有 .config 后缀。

Ex. #cat /var/lib/connman/example.config [global] Name = Example Description = Example network configuration [service_home_ethernet] Type = ethernet IPv4 = 192.168.1.42/255.255.255.0/192.168.1.1 IPv6 = 2001:db8::42/64/2001:db8::1 MAC = 01:02:03:04:05:06 Nameservers = 10.2.3.4,192.168.1.99 SearchDomains = my.home,isp.net Timeservers = 10.172.2.1,ntp.my.isp.net Domain = my.home [service_home_wifi] Type = wifi Name = my_home_wifi Passphrase = secret IPv4 = 192.168.2.2/255.255.255.0/192.168.2.1 MAC = 06:05:04:03:02:01

设置

为用户经常连接到的网络自动创建设置和配置文件。

# cat /var/lib/connman/settings [global] OfflineMode=false [WiFi] Enable=true Tethering=false [Bluetooth] Enable=false Tethering=false

配置文件设置按其服务名称存储在 /var/lib/connman/ 下的目录中。VPN设置可以在 /var/lib/康曼-vpn/ 中找到。

编写插件

基本插件包含通过CONNMAN_PLUGIN_DEFINE的插件描述,以及通过该描述定义的初始化/退出回调。

#include static int example_init(void) { return 0; } static void example_exit(void) { } CONNMAN_PLUGIN_DEFINE(example, "Example plugin", CONNMAN_VERSION, example_init, example_exit)

插件使用技术、网络和设备以及其他基础结构与 ConnMan 的核心功能进行交互。以下是技术基础架构:

ex. bluetooth plugin static struct connman_technology_driver tech_driver = { .name = "bluetooth", .type = CONNMAN_SERVICE_TYPE_BLUETOOTH, .probe = bluetooth_tech_probe, .remove = bluetooth_tech_remove, .set_tethering = bluetooth_tech_set_tethering, };

若要使连接管理器了解新的技术插件,我们需要通过调用connman_technology_driver_register()来注册其驱动程序。

connman_technology_driver_register(&tech_driver);

设备基础结构

设备表示给定技术的真实设备。每种技术可能有许多设备。

static struct connman_device_driver device_driver = { .name = "bluetooth", .type = CONNMAN_DEVICE_TYPE_BLUETOOTH, .probe = bluetooth_device_probe, .remove = bluetooth_device_remove, .enable = bluetooth_device_enable, .disable = bluetooth_device_disable, };

要注册驱动程序:

connman_device_driver_register(&device_driver);

此外,需要为每个插件编写代码来处理新设备的检测;蓝牙插件通过为 BlueZ D-Bus 接口注册观察程序来实现此目的。一旦出现新的蓝牙设备,插件需要通过调用connman_device_create()来通知ConnMan核心。对于蓝牙插件,调用将是:

struct connman_device *device; device = connman_device_create("bluetooth", CONNMAN_DEVICE_TYPE_BLUETOOTH)

网络基础设施

连接管理器为插件提供了一种方法来处理为每种类型的技术建立/处理连接的细节。对于蓝牙插件,需要注册一个connman_network_driver:

static struct connman_network_driver network_driver = { .name = "bluetooth", .type = CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN, .probe = bluetooth_pan_probe, .remove = bluetooth_pan_remove, .connect = bluetooth_pan_connect, .disconnect = bluetooth_pan_disconnect, };

然后,调用寄存器函数:

connman_network_driver_register(&network_driver);

康曼源文件/基础架构

初始化函数将在运行主循环之前在 src/main.c 中被调用。

src/util.c - /dev/urandom support src/inotify.c - used by the core (config.c) and the session policy plugin src/technology.c – used for technology interface src/notifier.c – basic notifier infrastructure src/agent.c – agent interface src/service.c – used for service interface src/peer_service.c – p2p peer service API src/peer.c – p2p peer object’s core logic src/provider.c – provider infrastructure src/network.c – network infrastructure used by plug-ins src/config.c – framework for configuration files src/device.c – device infrastructure used by plug-ins src/iptables.c – iptables support (netfilter chains and rules) src/firewall-iptables.c, nftables.c (older firewall.c) – firewall infrastructure. src/nat.c – used for NAT src/tethering.c – tethering infrastructure src/manager.c – Manager interface src/stats.c – used for storing service stats ( mmaped into memory) src/ipconfig.c – IP configuration framework src/rtnl.c – netlink support src/session.c – Allows 3rd party applications to request a network session src/resolver.c – resolver framework src/dhcp.c, dhcpv6.c – dhcp framework src/rfkill.c – rfkill interface support src/machine.c - basic systemd-hostnamed ( machine-type- “chassis”) support

康曼克特

康曼有一个标准的命令行客户端康曼克特。它可以在2模式下运行:

  • 在命令模式下,命令作为连接命令的参数输入,就像系统命令一样。
  • 交互模式是通过键入不带参数的 connmanctl 来启动的。提示将更改为 connmanctl>以指示它正在等待用户命令,就像 python 交互模式一样。

康曼克特示例

示例 1.启用和禁用无线网络

$ connmanctl technologies - check for the line that says Powered: True/False. $ connmanctl enable wifi - To power the wifi on. $ connmanctl disable wifi – To power off the wifi.

启用无线网络的其他方法可能包括 - IP链接设置。康曼将自动处理有线连接。

示例 2.连接到开放接入点

本节中的命令演示如何在命令模式下运行 connmanctl。要扫描网络,康曼克特尔接受称为技术的简单名称。要扫描附近的 WiFi 网络:

$ connmanctl scan wifi To list the available networks found after a scan run (example output): $ connmanctl services *AO MyNetwork wifi_dc85de828967_68756773616d_managed_psk OtherNET wifi_dc85de828967_38303944616e69656c73_managed_psk AnotherOne wifi_dc85de828967_3257495245363836_managed_wep FourthNetwork wifi_dc85de828967_4d7572706879_managed_wep AnO6penNetwork wifi_dc85de828967_4d6568657272696e_managed_none $ connmanctl connect wifi_dc85de828967_4d6568657272696e_managed_none

您现在应该已连接到网络。使用 ip 地址或连接状态进行检查。

示例 3.连接到受保护的接入点

对于受保护的接入点,请向 ConnMan 守护程序提供一些信息,至少提供密码或密码。

$ connmanctl connmanctl> scan wifi ----- To list services: connmanctl> services connmanctl> agent on --- register the agent to handle user requests. connmanctl> connect wifi_dc85de828967_38303944616e69656c73_managed_psk

代理会要求您提供更多信息,具体取决于您要连接到的网络类型。代理还将打印有关所需信息的其他数据,如以下示例所示。

Agent RequestInput wifi_dc85de828967_38303944616e69656c73_managed_psk Passphrase = [ Type=psk, Requirement=mandatory ] Passphrase?

提供请求的信息,在此示例中为密码,然后键入:

connmanctl> quit

如果您提供的信息正确无误,您现在应该已连接到受保护的接入点。

其他康曼克特用法:

技术

各种硬件接口被康文称为技术。要列出可用技术,请运行:

$ connmanctl technologies

可以通过以下方式打开/关闭技术:

$ connmanctl enable technology_type $ connmanctl disable technology_type

例如,要关闭无线网络:

$ connmanctl disable wifi

康曼测试脚本

康曼还提供了基本的python脚本(例如测试康曼,列表服务等)。通过这些脚本支持连接,断开连接,自动连接,服务,扫描,启用,禁用,脱机模式,状态等基本操作。

康曼调试

激活调试

我们可以使用 -d 命令行选项在 ConnMan 中激活调试打印。

-d Activate all normal debug prints -d src/service.c This prints debugging info from src/service.c file only -d src/network.c:src/ipconfig.c This activates debug prints in src/network.c and src/ipconfig.c files. -d 'src/n*.c' This would activate debug print from all the C source files starting with letter 'n' in src directory. Note the quotation marks around option, that is to prevent shell expansion. -d '*/n*.c:*/i*.c' Activate debug prints for all C source files starting with letters 'n' or 'i' in any sub-directory.

子组件调试

ConnMan 的某些组件具有激活的环境变量调试打印。如果设置了环境变量,则相应的组件将打印一些额外的调试信息。

可以使用以下环境变量:

  • CONNMAN_DHCP_DEBUG:与 DHCPv4 相关的调试信息
  • CONNMAN_DHCPV6_DEBUG:DHCPv6 相关的调试信息
  • CONNMAN_IPTABLES_DEBUG:使用表时的额外信息
  • CONNMAN_RESOLV_DEBUG:名称解析程序调试打印。当 ConnMan 解析主机名供自己使用时,将使用这些调试打印。请注意,DNS 代理调试打印不使用此环境变量。为此,可以使用“-d src/dns代理.c”命令行选项。
  • CONNMAN_SUPPLICANT_DEBUG:调试打印以进行连接和wpa_supplicant进程之间的通信。
  • v CONNMAN_WEB_DEBUG:在 Wispr 和 6to4 组件中执行互联网连接检查时,调试信息。

例:

CONNMAN_SUPPLICANT_DEBUG=1 src/connmand -n

示例:获取CONNMAN_IPTABLES_DEBUG日志

确保在内核中启用了 iptables 支持:

#zcat /proc/config.gz | grep "CONFIG_IP_NF_IPTABLES"

必须在内核中启用 IPTABLE:

CONFIG_IP_NF_IPTABLES=m or CONFIG_IP_NF_IPTABLES=y

清除所有可测试的过滤器:

# iptables –F

设置以下可测试规则以过滤 ICMP 数据包(输入、输出和转发数据包):

# iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix="filter INPUT:" # iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j LOG --log-prefix="filter INPUT:“ # iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -j LOG --log-prefix="filter OUTPUT:“ # iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j LOG --log-prefix="filter OUTPUT:“ # iptables -t filter -A FORWARD -p icmp --icmp-type echo-request -j LOG --log-prefix="filter FORWARD:“ # iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply -j LOG --log-prefix="filter FORWARD:"

导出以下环境变量以启用康曼的 iptables 调试:

# export CONNMAN_IPTABLES_DEBUG=1

在启用调试选项的情况下启动 Connmand 连接管理器:

# /usr/sbin/connmand -d -n -I eth0

每当涉及 ICMP 数据包时,都应显示康文守护程序消息日志。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121882
收藏 人收藏

    评论

    相关推荐

    联想将进军互联网

    董事成员以及管理架构等问题,均被杨元庆以“这部分信息暂时保密”为由拒绝了。昨晚,记者从联想集团品牌沟通部了解到,与百视通成立合资公司只是联想移动互联战略数字家庭计划中的第一步,未来联想在互联网电视
    发表于 03-18 10:48

    互联网电视迅速崛起

    3646元,价格差距为704元。在原有非互联网电视的价格再加上几百块钱,就可以得到像免费看大片这样的功能,性价比高,这也是广大消费者选择互联网电视的又一个原因。 电视进入到互联网
    发表于 03-22 11:31

    工业互联网

    工业互联网是全球工业系统与高级计算、分析、感应技术以及互联网连接融合的结果。它通过智能机器 间的连接并最终将人机连接,结合软件和大数据分析,
    发表于 01-25 09:29

    蓝牙4.2标准将支持灵活的互联网连接

    本帖最后由 冒汗的心情 于 2016-3-4 14:27 编辑 蓝牙4.2标准将支持灵活的互联网连接蓝牙技术联盟去年底推出了蓝牙4.2,在蓝牙4.2标准下,设备之间的数据传输速度提升了约2.5
    发表于 02-26 11:24

    工业互联网

    断发展。伴随着这样的发展,三种元素逐渐融合,充分体现出工业互联网之精髓:智能机器:以崭新的方法将现实世界中的机器、设备、团队和网络通过先进的传感器、控制器和软件应用程序连接起来。高级分析:使用基于物理
    发表于 04-17 15:56

    技术与互联网+

    急急急!!!!!!!!!!!请问,如果用单片机做出了一个作品,互联网+可以怎么用的上我的作品?除了用互联网卖出去,还可以怎么办呢
    发表于 07-03 22:53

    硬件与互联网连接

    请教各位大神我之间是做软件java开发的现在 觉得未来互联网是必然发展趋势,现在 学习了解物联网技术,我想弄一款可穿戴的智能终端设备,通过GPRS实现跟服务器数据传递交互,我现在该怎么做该怎么操作了,该做那些准备看些什么样的书了
    发表于 05-24 15:52

    关于esp8266连接互联网问题

    esp8266怎么连接互联网,以实现远程通过3G网控制esp8266来控制单片机工作。8266已经工作在AP+STA模式连接上WiFi了。如果通过
    发表于 07-30 22:06

    如何在不连接互联网的情况下ping通pc、虚拟机Linux和开发板?

    如果不连接互联网怎么ping通pc、虚拟机Linux和开发板,并实现利用cute文件传输,谢谢,新人不太懂
    发表于 10-21 01:35

    什么是产业互联网

    2018年10月,腾讯宣传进军产业互联网;2019年9月,腾讯完成了史上最大的组织架构调整,新成立云与智慧产业事业群,正式发力产业互联网;2020年1月,腾讯发布《2020产业安全报告:产业互联网
    发表于 01-18 11:40

    为什么要提出工业互联网看了就知道

    模式和商务模式发生变革,而工业互联网就是承载这三个模式变革的载体,这也是工业互联网存在和发展的价值之所在。  价值一:改变管理模式  由于历史和地理的原因,我国工业产业存在着不同的行
    发表于 01-05 16:43

    2021年互联网将面临哪些问题以及如何解决?

    持和发展这些网络。  在管理快速的Internet增长,确保用户(和事物)的安全以及确保每个人都可以连接到Internet方面,我们面临许多挑战。因此,RIPENCC公共政策和互联网治理经理问,我们将
    发表于 02-23 17:19

    如何搭建适合ULC手机市场的移动互联网设备

    如何搭建适合ULC手机市场的移动互联网设备
    发表于 06-01 07:00

    NodeMCU突然无法连接互联网的原因?

    直到昨天,我的 NodeMCU 还可以非常轻松地连接互联网。直到我安装了一个库从那一刻起,NodeMCU 无法连接互联网!!!我删除了库(从 C:\Users\Pan\Docume
    发表于 02-27 07:11

    Kindle无法连接互联网怎么解决?

    其他所有事情,只是无法连接互联网。这很糟糕,因为我想读一些新书。 我试过关闭飞行模式然后再打开,但没有用。(可能不会,但至少它证明问题不是飞行模式。) 我尝试通过按住电源按钮 20 秒来进行重置,但没有任何效果。 有人知道怎么修这个东西吗?
    发表于 05-15 08:37