How to disable/disconnect ethernet adapter in mac os x programmatically? - objective-c

I am new to mac os x programming and just got an assignment to write small utility that disable either wireless or wired adapter based on configuration. I was able to disconnect wireless using corewlan framework like :
CWInterface interface = [CWInterface interfaceWithName:#"en1"];
BOOL result = [interface setPower:NO error:&err];
and it is working as expected. I need similar code to disable/disconnect ethernet adapter. I researched that ifconfig (as mentioned below can be used):
sudo ifconfig en0 down
but it require admin password and that i don't want to do. Please suggest an alternative programatic way to disable ethernet adapter without root password.
I read that SCNetworkConfiguration can be used but don't know how to use it. Please help.
Thanks

You cannot shut off network interfaces without having admin access (i.e. that's why the padlock is there in the Network Preference Pane). Think of it this way... you would not want non-admin users on any public machine being able to turn off the network arbitrarily.
For my own apps where I also disable Ethernet & WiFi, I have to get privileges to launch a separate tool in order to run stuff from the SystemConfiguration framework as admin.

Related

Android Emulator connect external storage Device while running

I have an App that needs to detect, if a USB Storage device is getting mounted. Can i simulate the mounting of an USB Storage Device while the Emulator is already running? This way i can debug the behavior of my app.
As i know, for registering the mounting and unmounting of the USB Storage Device i can use the StorageVolumeCallback(). What do i have to do to write a simple .txt File to that attached USB Storage Device?
Im having trubble to create a StorageManager inside my ViewModel because i do not have access to the Context.
Im thankful for any Tipp related to USB Storage Management at all.
Info:
API Version: 31
IDE: Android Studio
Language: Kotlin
Edit:
So i do not necessarily need to have a external usb drive mounted at startup. If its possible with adb it would be great if i could just forward a usb Pendrive to the running emulator when i need it. Something like adb connectUsbDevice -deviceid=****,vendorid=***
There isn't a .NET library I'm aware of which can do this. However, please refer to this post where the brilliant answer shows how to do this interfacing with the Win 32 API.
How do I disable a system device programmatically?
You'll need a combination of this, and a WMI query to find an attached PnP device of type storage. As a clue:
using (var searcher = new ManagementObjectSearcher(#"SELECT * FROM Win32_USBHub"))
{
collection = searcher.Get();
}
Change Win32_USBHub to the correct class if this isn't giving you what you're looking for.
EDIT: Be warned. If you're disabling storage devices, make sure they're not in use. That's what the "Safely remove USB" option is for in Windows.
Another option, if you don't need to emulate this in code, use a real USB storage device inserted in the system and use PowerShell to get, disable, and enable the device.
The Cmdlets you'll need are:
Get-PnpDevice
Disable-PnpDevice
Enable-PnpDevice

USB Mobile Broadband Modem on Windows 10 IoT?

Anyone had experience using a USB Mobile Broadband on Windows IoT with the Raspberry Pi2 already?
I have a Huawei datacard in the Windows IoT and appears as HUAWEI Mobile on connected devices but I'm unable to see the device on the wifimanager.htm admin page.
Don't even appear on the Device Manager list. Is this lack of drivers?
I was looking for a solution too, and I have finally found one. I hope the following will help you!
For the record, I used a Vodafone (Huawei) K5150, "officially" supported and Microsoft verified, according to the hardware compatibility list: https://developer.microsoft.com/en-us/windows/iot/win10/supportedinterfaces. The device was recognized and visible on the portal through an hdmi screen. Anyway, the raspberry couldn't get internet access.
Here is what I did to make it work:
install the key on a common laptop and check the internet access. Windows should see it as a cellular connection by the way.
find the xml file generated by Windows and located under C:\ProgramData\Microsoft\WwanSvc\Profiles. This file is called a profile and is used by Windows to characterize every wireless connection it sees. You can of course create yourself this file from scratch, but it's far more complicated/boring. You can also normally do that with the netsh command and the import or dump sub-command, but it doesn't work for broadband devices.
connect your raspberry to your local network and go to \\[name or IP address]\c$. In my case, it was \\minwinpc\c$. There, find a suitable place to copy the xml file, as well as the bmp file next to it, and don't forget to modify its content to point the right path for the icon (the bmp file).
the next step is super tricky, but highly important: you have to find the subscriber ID for your key. The one saved in the xml file is actually a kind of hash and if you don't set the correct value you'll have an error like
Add Profile Failure: Invalid Profile XML.
connect the key to your raspberry and enter a PSSession with PowerShell (details here: https://developer.microsoft.com/en-us/windows/iot/win10/samples/powershell). Then, use this command: netsh mbn show readyinfo interface="Cellular". The correct interface (in my case it's "Cellular") can be retrieved with the command netsh mbn show interfaces (mbn standing for Mobile Broadband I suppose). The subscriber ID, with other useful information, is displayed and you can copy it the to the xml file on your raspberry.
what's left is the actual profile activation, in two parts: add the newly imported profile and tell the raspberry to connect to it. For that, use the commands netsh mbn add profile interface="Cellular" name="profile.xml" and netsh mbn connect interface="Cellular" connmode=name name=ProfileName.
You mobile broadband key should now be activated and the raspberry should automatically connect to it at start.
Here are the few links that helped me a lot:
export the profile: https://www.experts-exchange.com/questions/28324340/Adding-custom-mobile-broadband-profiles-in-Win-7.html
replace the subscriber ID: https://social.technet.microsoft.com/Forums/office/en-US/7c2d6c77-1974-432b-a439-6e58f9306234/receive-add-profile-failure-invalid-profile-xml-error-when-adding-wwan-profile-windows-7?forum=w7itpronetworking
connect to the raspberry to copy the files: https://developer.microsoft.com/en-us/windows/iot/win10/samples/smb

TIA PORTAL v11. Open existing project

I have to use an existing project in STEP7/TIA PORTAL v11 and I have the PLC (CPU 1212C AC/DC/RLY) with the code downloaded inside it which is connected to a touch panel (KTP600 Basic Color PN).
What I want is to download the code from the PLC to my computer to try to modify it, is this posible?
Because I've tried to connect it to my PC and it doesn't detect it. It turns on the ERROR and the MAINT leds in red.
The configuration is over a virtual machine (VMware player with Windows 7) because my PC has Windows 8 installed and it doesn't support TIA PORTAL is there any problem with this?
If program was uploaded with TIA11 it is not good idea to use v13. What is more with other version you need new licence keys.
From your vm ping the plc address if itis in right subnet. Then serch for sccessible nodes. On your picture i see that you should try using 'search all accessible devices'.
Upgrade to version 13 of TIA Portal. This version can run under Windows 8.
Under VMWare you have to change the network settings for your Virtual Machine to bridged. Also install VMWware Tools.
Those are some steps that I would try.
make sure you can ping it from inside your Virtual Machine. It will validate the route to the plc (cable, network config). It’s not a necessary step to connect to a plc, but it’s a good check.
Go to Control Panel on Windows, then PG/PC , then make sure that you have the right Hardware Interface Active
If you still not able to see the PLC, I advise you to to download PRONETA, if it still doesn’t show up there, then the research would have to go deeper. Until today, I’ve only one time in all year when a device have not apeares in Proneta.

Sending AT commands to my internal UMTS modem

I have a thinkpad laptop and I would like to send AT commands to my modem once it is connected to the network. The interface that is used is '/dev/ttyACM0'. What is the best way to send my commands there? I tried gnokii but wasn't able to connect to my modem :/ I also tried echo'ing commands to the device, this worked, but it is not easy to get the output of the command to proceed with the computation. Maybe one of you guys has a better way to do this. TIA
Have you tried minicom? (assuming from your interface that you are using Linux)
Introduction to minicom.
Entering "minicom" in www.alternativeto.net gives a link to another terminal emulator for Linux called Cutecom, but I have no personal experience of it.

How to connect to wifi

Can it be done? Opening the wifi settings is possible, but I dont know how to connect to a specific wifi network.
this code:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:#"prefs:root=WIFI"]];
opens the iPhone wifi settings dialog. Is there any way to compose the URL name? For example
"prefs:root="WIFI&path=wifi_name"...
This is possible inside an app, but I believe it is not allowed by Apple guidelines. You should be detecting if there is a networking connection either via WWAN or WiFi or if you can connect to a specific host via a URL. Please see Apple Reachability code for the full implementation for the Reachability code produced by Apple. So this is already done for you.
I wouldn't expect this to be possible because of the security risks invovled. Imagine an app that messes with your WiFi settings without your knowledge and permission.