I have an IP camera and I can only access it through IP and password. Right now when I send it a snapshot request with my system I get
<?xml version="1.0" encoding="UTF-8" ?> <ResponseStatus version="1.0" xmlns="urn:psialliance-org"> <requestURL>/ISAPI/Streaming/channels/101/picture</requestURL> <statusCode>3</statusCode> <statusString>Device Error</statusString> <subStatusCode>deviceError</subStatusCode> </ResponseStatus>:
Right now what I need is to reset that Camera, for example
Model: Hikvision
Vendor: NVR CH1
IP: 10.70.25.1
PORT: 8100
user: shadmin
Password: shadmin
How could I send some request to the camera to reset it? or is there any lists of commands which we can use with HTTP get post methods? Any lists for Hikvision CGI? and Onvif commands to reset the camera?
Any help will be thankful
It seems that you are doing the HTTP request wrong.
To retrieve a snapshot, you can use this URL:
http://user:password#IP/Streaming/channels/1/picture
The number in bold identifies the channel you are getting the snapshot from.
You can find in this link the download list from Hikvision, the one you are looking for is the
Hikvision ISAPI(IP Surveillance Application Program Interface)
NOTE: You should be very carefull with any blank space in the PUT messages you send to the camera, as the camera do not trim the messages.
use SADP tools to find and reset your IPcamera or NVR.
download it from below link :
https://www.hikvision.com/en/support/tools/hitools/clea8b3e4ea7da90a9/
You could take a look at /ISAPI/System/factoryReset?mode=
Method: PUT
Query:
mode: The recovery mode, which contains full, basic, and part
mode. The default mode is full, and all the device parameters will
be restored to default settings; for basic mode, the device
parameters, except network and user parameters, will be restored to
default settings; for part mode, only a part of default settings will
be restored.
Normally the authentication for interacting with hikvision cameras is digest or basic
Related
I am currently using 'connmanctl config' to set static and DHCP settings with a wired connection. I'm curious if anyone has been successful with applying settings with the wire unplugged?
I would typically use 'connmanctl services' for a list of services then perform a string.match(blah, "ethernet_%w+_cable") to use that wired service name. I have been able to find and apply that service name with the ethernet cable unplugged BUT now when using 'connmanctl config':
connmanctl config ethernet_f8dc7a04ea82_cable --ipv4 manual 192.168.91.108 255.255.255.0 192.168.91.1 --nameservers 8.8.8.8
I get this error:
Error ethernet_f8dc7a04ea82_cable: Method "SetProperty" with signature "sv" on interface "net.connman.Service" doesn't exist
As you can see I have the service applied to the command and this is the same service name as when the cable is plugged in. This feature would be nice for equipment that needs to be pre-programmed before reaching the customer. I have also researched this error but can't find it being an issue with others the same as it is with my situation. Have also read many blogs, articles, etc...on trying to achieve this with nothing that jumps out at me.
...Any ideas ?
I had to perform this action via back-end with the code that I am using to configure. Just an example...settings are applied to /var/lib/connman/ethernet_?????cable/settings. I created the adapter name with the MAC address because it does not exist until the network is detected, created the directory /ethernet?????_cable then created an empty settings file on the fly. When programming and saving the settings via the equipment I am using I just insert the settings manually. When a network cable is plugged in and detected the settings you have applied work wonderfully.
I would like to ask if it is possible to receive UDP or TCP packets instead of just the Physical layer by configuring the wifi_rx.grc 1 flow graph in GNU Radio.
wifi_rx.grc 1 is from the example in gr-ieee80211
I am using a LimeSDR-Mini as rx source
You can use the Wireshark Connector block to write the decoded frames in a PCAP file and inspect all layers with Wireshark/tcpdump/tshark just with like a normal WLAN card.
The flow graph you are referring to already contains these blocks albeit they are disabled by default. Click on them and click Enable in the context menu. Then run the flow graph and open the file in Wireshark. If you want live decoding you can write to a Linux pipe. See the rx_demo.sh script in the apps folder on how to do that.
I'm trying something akin to:
testcafe remote tests/dashboards/CustomerTests/myorg.js --qr-code -ports 9999,9998
But that still exposes the following URL:
http://192.168.134.205:58732/browser/connect
Is there any way to control the "58732" part of this? My internal network is pretty well locked down, and that port # changes every time.
Thanks!
It works correctly with the proper --ports argument (notice double --):
testcafe remote test.js --qr-code --ports 9999,9998
Using locally installed version of TestCafe.
Connecting 1 remote browser(s)...
Navigate to the following URL from each remote browser.
You can either enter the URL or scan the QR-code.
Connect URL: http://192.168.67.55:9999/browser/connect
I am wondering if it possible to configure the remote notify option to pass a URL.
I see there is a function for onErrorRemoteDisableDenial. I tried to modify it, but it seems to disables the app. Even if i put code to continue, the next call to the backend does not work.
But what we are looking for is giving the user the option to update via URL, or just continue with the app version they currently have.
Using Worklight 6.1
There is a way to customize both Remote Disable and Remote Notify, but the downloadLink (the link that you've set in Worklight Console) is available only when setting Remote Disable, not Remote Notify. Only the message (the text set in Worklight Console) will be available.
You can customize the Remote Notify flow by using the following in main.js (outside of any function):
wl_remoteDisableChallengeHandler.handleChallenge = function(message,downloadLink) {
WL.SimpleDialog.show(
"New Version",
message,
[
{text: "Download", handler: function() {
// Maybe use WL.App.openURL(downloadLink) to go to the app store
}},
{text: "Close", handler: function() {
// Continue with the app
}}
]);
};
wl_remoteDisableChallengeHandler.handleChallenge overrides the default Remote Notify code path. wl_remoteDisableChallengeHandler.handleFailure will override the default Remote Disable code path (and this is another way to customize Remote Disable).
Edit: per the findings in the comments, in order to get both the message and downloadLink, you will first need to temporary set Remote Disable and then change to Remote Notify, this is a workaround because Remote Notify by default is not meant to also pass the downloadLink to the default provided dialog.
Note: Remote Notify is meant to be displayed only once per a message's life cycle, so after it was displayed - it will not be displayed again until a the message is set again in the console.
A way to get the code to work on each application launch is to clear the application's HTML local storage (at some point while the app is running), where a "flag" is stored to tell the application not to display the message again (I forgot its name, but you could print the contents of the local storage and debug that).
Sounds like a nice feature request: https://developer.ibm.com/mobilefirstplatform/help
I am trying show end users maintainence window such as "we are down please try later" and disable the application but my problem is what if my worklight server itself is down and not reachable and i cannot use the feature provided by worklight console,
Is there a way i make my app talk to a different server which returns back the below json data when a app is disabled , can i simulate this behaviour is this possible.
json recieved on access disabled in worklight :-
/*-secure-
{"WL-Authentication-Failure":{"wl_remoteDisableRealm":{"message”:”We are down, Please try again soon","downloadLink":null,"messageType":"BLOCK"}}}*/
I have some conceptual problems with this question.
Typically a production environment (simplified) would not consist of a single server serving your end-users... meaning, there would be a cluster of nodes, each node being a Worklight Server, and this cluster would be behind a load balancer that would direct the incoming requests. And so in a situation where a node is down for maintenance like in your scenario there would still be more servers able to serve - there would be no down time.
And thus at this point your suggestion to simulate a Remote Disable by sending it from another(?) Worklight Server seems not so much the correct path to take (it may even be simply wrong). Have you had this second Worklight Server, why wouldn't it just serve the apps business like usual? See again my first paragraph about clustering.
Now lets assume there is still a downtime, that affects all servers. The application's client logic should be able to handle failed connections to the Worklight Server. In such a case you should handle this in the WL.Client.connect()'s onFailure callback function to display a WL.SimpleDialog that looks just like a Remote Disable's dialog... or perhaps via the initOption.js's onConnectionFailure callback.
Bottom line: you cannot simulate the JSON that is sent back for the wl_RemoteDisable realm; it is part of a larger security mechanism.
Additionally though, perhaps a way to better handle maintenance mode on your server is to have the HTTP server return a specific HTTP status code, check for this code and display a proper message based on the returned HTTP status code.
To check for this code in a simple example:
Note: the getStatus method is available starting MobileFirst Platform Foundation 7.0 (formerly "Worklight").
function wlCommonInit(){
WL.Client.connect({onSuccess:success, onFailure:failure});
}
function success(response) {
// ...
}
function failure(response) {
if (response.getStatus() == "503") {
// site is down for maintenance - display a proper message.
} else if ...
}