Onvif更改ip地址

__亲测,可用,gsoap版本为2.8.96最新版本,在网上搜索的其他设置ip地址的gsoap版本都太低了,里面函数和接口都变更了,没办法,只好自己搞。如下: __
我生成的是C++版本的代码,C语言的只需要把数据结构修改成struct即可,另外也可以直接拿到QT里面使用,亲测可用。

	void PrintErr(struct soap* _psoap)
	{
		fflush(stdout);
		processEventLog(__FILE__, __LINE__, stdout, "error:%d faultstring:%s faultcode:%s faultsubcode:%s faultdetail:%s", _psoap->error, 
		*soap_faultstring(_psoap), *soap_faultcode(_psoap),*soap_faultsubcode(_psoap), *soap_faultdetail(_psoap));
	}	

/* step -4. set NetworkInterfaces */
int set_networkinterfaces()
{
	char szHostName[MAX_HOSTNAME_LEN] = { 0 };
    char uname[20];
    char pword[20];
    char ip_port[20];
    DeviceBindingProxy proxyDevice;

strcpy(ip_port, "193.169.4.63:80");
//char *url = "193.169.4.82:80";
strcat(szHostName, "http://");
strcat(szHostName, ip_port);
strcat(szHostName, "/onvif/device_service");
proxyDevice.soap_endpoint = szHostName;

struct soap *soap = soap_new();
if (soap == NULL){
    printf("%s %d  get_networkinterfaces soap == NULL\n", __FILE__, __LINE__);
    return -1;
}


if (SOAP_OK != soap_wsse_add_UsernameTokenDigest(proxyDevice.soap, NULL, "admin", "admin"))
{
    return -1;
}

printf("\n\n*************** Step1.get_networkinterfaces *********************************************\n\n");

_tds__GetNetworkInterfaces *tds__GetNetworkInterfaces = soap_new__tds__GetNetworkInterfaces(soap, -1);
_tds__GetNetworkInterfacesResponse *tds__GetNetworkInterfacesResponse = soap_new__tds__GetNetworkInterfacesResponse(soap, -1);

if (SOAP_OK == proxyDevice.GetNetworkInterfaces(tds__GetNetworkInterfaces, *tds__GetNetworkInterfacesResponse))
{
    //processEventLog(__FILE__, __LINE__, stdout, "-------------------NetworkInterfaces-------------------");
    processEventLog(__FILE__, __LINE__, stdout, "token:%s", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->token);
    processEventLog(__FILE__, __LINE__, stdout, "HwAddress:%s", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->Info->HwAddress);
    processEventLog(__FILE__, __LINE__, stdout, "LinkLocal addr:%s", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->LinkLocal->Address);
    processEventLog(__FILE__, __LINE__, stdout, "LinkLocal PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->LinkLocal->PrefixLength);
    processEventLog(__FILE__, __LINE__, stdout, "Manual addr:%s", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->Manual[0]->Address);
    processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->Manual[0]->PrefixLength);

}
else
{
    PrintErr(proxyDevice.soap);
}

soap_destroy(soap);
soap_end(soap);
//soap_done(soap);
printf("\n\n  get networkinterfaces over now ......\n\n\n");


/* ip invalid return directly */



/* set network interfaces */
printf("\n\n*************** Step2.set_networkinterfaces *********************************************\n\n");

tt__NetworkInterfaceSetConfiguration NetworkInterface;
tt__IPv4NetworkInterfaceSetConfiguration tt_ipv4;
tt__PrefixedIPv4Address tt_ipv4_address;
tt__PrefixedIPv4Address* p_tt_ipv4_address;

bool netEnable = true;
bool netDisable = false;
NetworkInterface.Enabled = &netEnable;
/*
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", *tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->Info->MTU);
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->Link->AdminSettings->AutoNegotiation);
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->DHCP);
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Enabled);
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->Manual[0]->PrefixLength);
processEventLog(__FILE__, __LINE__, stdout, "Manual PrefixLength:%d", *tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->Info->MTU);*/

NetworkInterface.MTU = tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->Info->MTU;

//NetworkInterface.IPv4->__sizeManual =1;
tt_ipv4.__sizeManual = 1;
tt_ipv4.DHCP = &netDisable;
//NetworkInterface.IPv4->DHCP = &tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->DHCP;
tt_ipv4.Enabled = &netEnable;
//NetworkInterface.IPv4->Enabled = &tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Enabled;

//new ip
//NetworkInterface.IPv4->Manual[0]->Address = ui->lineEdit_ip->text().toUtf8().data();
tt_ipv4_address.Address = "193.169.4.154";
tt_ipv4_address.PrefixLength = tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->Manual[0]->PrefixLength;
//NetworkInterface.IPv4->Manual[0]->PrefixLength = tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->IPv4->Config->Manual[0]->PrefixLength;

p_tt_ipv4_address = &tt_ipv4_address;
tt_ipv4.Manual = &p_tt_ipv4_address;
NetworkInterface.IPv4 = &tt_ipv4;

if (SOAP_OK != soap_wsse_add_UsernameTokenDigest(proxyDevice.soap, NULL, "admin", "admin"))
{
    return -1;
}

printf("token = %s\n", tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->token);
char token_name[20];

memset(token_name, 0, sizeof(token_name));
strcpy(token_name, tds__GetNetworkInterfacesResponse->NetworkInterfaces[0]->token);

_tds__SetNetworkInterfaces * tds__SetNetworkInterfaces =  soap_new__tds__SetNetworkInterfaces(soap, -1);
tds__SetNetworkInterfaces->InterfaceToken = token_name;
tds__SetNetworkInterfaces->NetworkInterface = &NetworkInterface;

_tds__SetNetworkInterfacesResponse * tds__SetNetworkInterfacesResponse = soap_new_req__tds__SetNetworkInterfacesResponse(soap, false);

//proxyDevice.SetNetworkInterfaces
printf("\n\n  begin set networkinterfaces now ......\n\n\n");
if (SOAP_OK == proxyDevice.SetNetworkInterfaces(tds__SetNetworkInterfaces, *tds__SetNetworkInterfacesResponse))
{
	printf("set networkinterfaces ok...\n");
}
else
{
    PrintErr(proxyDevice.soap);
}

printf("\n\n  set networkinterfaces over now ......\n\n\n");
soap_destroy(soap);
soap_end(soap);
soap_done(soap);
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走在软件开发路上的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值