openwrt使用uci C API获取和修改wifi密码
2018-03-21 15:53
2296 查看
openwrt版本:DESIGNATED DRIVER (Bleeding Edge, r49395)
【读wifi参数中的ssid】
[cpp] view plain copyint getWirelessCfgValue(char *name,char *value, int valueBufLen)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * uciCtx = uci_alloc_context();
char * pValueData = NULL;
struct uci_package * pkg = NULL;
struct uci_element * e;
const char * NETWORK_UCI_CFG_NAME = "wireless";
if (UCI_OK != uci_load(uciCtx, NETWORK_UCI_CFG_NAME, &pkg))
goto cleanup;
uci_foreach_element(&pkg->sections, e)
{
struct uci_section *s = uci_to_section(e);
if (NULL != (pValueData = uci_lookup_option_string(uciCtx, s, name)))
{
strncpy(value, pValueData, valueBufLen);
printf("get wireless cfg ok, %s: %s\n", name, value);
}
}
uci_unload(uciCtx, pkg);
cleanup:
uci_free_context(uciCtx);
uciCtx = NULL;
return RC_PROC_SUCC;
}
【修改WIFI参数中的ssid】
下面函数中注销的那部分代码一直无法修改ssid成功。 如果对应的option不存在的话,下面的函数应该还需要再修改一下
[cpp] view plain copyint setWirelessCfgValue(char *name,char *value)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * ctx = uci_alloc_context();
if (NULL == ctx)
printf("setWirelessCfgValue uci_alloc_context error\n");
int ret = 0;
#if 0
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
ptr.package = "wireless",
ptr.section = "@wifi-iface[0]",
ptr.option = name,
ptr.value = value,
#else
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
char uciOption[128];
memset(uciOption, 0, sizeof(uciOption));
snprintf(uciOption, sizeof(uciOption)-1, "wireless.@wifi-iface[0].%s", name);
printf("uci_lookup_ptr %s\n", uciOption);
if(UCI_OK != uci_lookup_ptr(ctx, &ptr, uciOption, true))
{
uci_perror(ctx, "no found!\n");
return RC_PROC_FAIL;
}
printf("uci_lookup_ptr ok: %s.%s.%s\n",
ptr.package, ptr.section, ptr.option);
ptr.value = value;
#endif
printf("change cfg: %s.%s.%s, value(%s)\n",
ptr.package, ptr.section, ptr.option, ptr.value);
ret = uci_set(ctx,&ptr);
printf("uci_set ret(%d)\n", ret);
if (0 == ret){
ret = uci_commit(ctx, &ptr.p, false);
printf("uci_commit ret(%d)\n", ret);
}
uci_unload(ctx,ptr.p);
uci_free_context(ctx);
printf("set wireless cfg end, %s: %s\n", name, value);
return RC_PROC_SUCC;
}
【main函数】
[cpp] view plain copyint main(int argc , char** argv)
{
char ssidStr[64];
memset(ssidStr, 0, sizeof(ssidStr));
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
setWirelessCfgValue("ssid","miva_hello_TEST");
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
return 0;
}
执行结果:
get wireless cfg ok, ssid: OpenWrt_7F3CD4
uci_lookup_ptr wireless.@wifi-iface[0].ssid
uci_lookup_ptr ok: wireless.cfg033579.ssid
change cfg: wireless.cfg033579.ssid, value(miva_hello_TEST)
uci_set ret(0)
uci_commit ret(0)
set wireless cfg end, ssid: miva_hello_TEST
get wireless cfg ok, ssid: miva_hello_TEST
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/junglefly/article/details/52415978
【读wifi参数中的ssid】
[cpp] view plain copyint getWirelessCfgValue(char *name,char *value, int valueBufLen)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * uciCtx = uci_alloc_context();
char * pValueData = NULL;
struct uci_package * pkg = NULL;
struct uci_element * e;
const char * NETWORK_UCI_CFG_NAME = "wireless";
if (UCI_OK != uci_load(uciCtx, NETWORK_UCI_CFG_NAME, &pkg))
goto cleanup;
uci_foreach_element(&pkg->sections, e)
{
struct uci_section *s = uci_to_section(e);
if (NULL != (pValueData = uci_lookup_option_string(uciCtx, s, name)))
{
strncpy(value, pValueData, valueBufLen);
printf("get wireless cfg ok, %s: %s\n", name, value);
}
}
uci_unload(uciCtx, pkg);
cleanup:
uci_free_context(uciCtx);
uciCtx = NULL;
return RC_PROC_SUCC;
}
【修改WIFI参数中的ssid】
下面函数中注销的那部分代码一直无法修改ssid成功。 如果对应的option不存在的话,下面的函数应该还需要再修改一下
[cpp] view plain copyint setWirelessCfgValue(char *name,char *value)
{
if (NULL == name || NULL == value)
{
return RC_PROC_FAIL;
}
struct uci_context * ctx = uci_alloc_context();
if (NULL == ctx)
printf("setWirelessCfgValue uci_alloc_context error\n");
int ret = 0;
#if 0
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
ptr.package = "wireless",
ptr.section = "@wifi-iface[0]",
ptr.option = name,
ptr.value = value,
#else
struct uci_ptr ptr;
memset(&ptr, 0, sizeof(ptr));
char uciOption[128];
memset(uciOption, 0, sizeof(uciOption));
snprintf(uciOption, sizeof(uciOption)-1, "wireless.@wifi-iface[0].%s", name);
printf("uci_lookup_ptr %s\n", uciOption);
if(UCI_OK != uci_lookup_ptr(ctx, &ptr, uciOption, true))
{
uci_perror(ctx, "no found!\n");
return RC_PROC_FAIL;
}
printf("uci_lookup_ptr ok: %s.%s.%s\n",
ptr.package, ptr.section, ptr.option);
ptr.value = value;
#endif
printf("change cfg: %s.%s.%s, value(%s)\n",
ptr.package, ptr.section, ptr.option, ptr.value);
ret = uci_set(ctx,&ptr);
printf("uci_set ret(%d)\n", ret);
if (0 == ret){
ret = uci_commit(ctx, &ptr.p, false);
printf("uci_commit ret(%d)\n", ret);
}
uci_unload(ctx,ptr.p);
uci_free_context(ctx);
printf("set wireless cfg end, %s: %s\n", name, value);
return RC_PROC_SUCC;
}
【main函数】
[cpp] view plain copyint main(int argc , char** argv)
{
char ssidStr[64];
memset(ssidStr, 0, sizeof(ssidStr));
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
setWirelessCfgValue("ssid","miva_hello_TEST");
getWirelessCfgValue("ssid",ssidStr, sizeof(ssidStr));
return 0;
}
执行结果:
get wireless cfg ok, ssid: OpenWrt_7F3CD4
uci_lookup_ptr wireless.@wifi-iface[0].ssid
uci_lookup_ptr ok: wireless.cfg033579.ssid
change cfg: wireless.cfg033579.ssid, value(miva_hello_TEST)
uci_set ret(0)
uci_commit ret(0)
set wireless cfg end, ssid: miva_hello_TEST
get wireless cfg ok, ssid: miva_hello_TEST
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/junglefly/article/details/52415978
相关文章推荐
- 使用uci的C API获得和修改参数
- 使用Kali无线渗透获取宿舍WiFi密码(WPA)
- 菜鸟学堂001――使用getpw以及pwdump获取系统密码
- 使用存储过程修改sql server 2005 用户密码
- 配置使用web方式修改域用户帐户密码
- 使用 Windwos 钩子获取丢失的密码
- 使用他人的MD5编码类,修改形成密码串
- Java 使用SSH连接Linux 使用passwd命令修改密码
- Ubuntu下修改root帐户密码,使用root登录
- 使用组策略统一修改客户端本地管理员密码
- 使用mysqladmin修改密码
- 使用mysqladmin命令修改Mysql密码
- 修改mysql密码,使用mysqladmin命令
- 使用mysqladmin修改用户密码的正确方法
- 使用Web方式修改域用户密码
- 网络攻防实战――使用wirelesskeyview轻松获取无线密码
- Windows 2000/2003下如何使用组策略禁止用户修改密码
- 使用windows自带的ftp命令修改ftp密码。
- Oracle10g 修改SYSMAN密码导致em的dbconsole无法正常使用
- 使用Adsutil.vbs来获取IIS用户的密码