@vk496
desde el punto de vista de sistemas, y para ser pulcro, si existe un gestor de conexión debes usarlo, ya que es este quien se encarga de todo, incluido el llamar al cliente dhcp suponiendo que fuese necesario, o asignar una IP estática que ya estuviera configurada en el gestor de conexión para ese adaptador de red.
el caso mas sencillo, aunque genere cierto volumen de codigo, sería:
detectar si el sistema tiene los controles de daemons en init.d (los que usamos nosotros en debian/kali/ubuntu) o si los tiene en rc.d (wifiway, slax, slackware y derivadas)
cuando ya has detectado la carpeta base de init, pasas a buscar qué tipo de gestor de conexion usa el sistema:
si existe network-manager, ajustas una variable, por ejemplo control_mode, a "network-manager"
si existe wicd, ajustas control_mode, a "wicd"
case else, ajistas control_mode a "direct"
luego, detienes y reinicias los gestores de conexion usando un case con una cláusula para cada caso, mereciendo especial hincapié el modo direct donde deberás de levantar la interfaz por tí mismo y llamar al cliente dhcp que hayas encontrado en el sistema (which pump; which dhcpcd; which dhcpcd3; which dhclient... alguno estará en el path)
esto, por lo que respecta al control de interfaces.
por lo que respecta al dichoso macchanger. lo mejor es que utilices una versión actualizada del mismo, compatible con todos los stacks y nuevos metodos de cfg de ieee80211, y que solamente en caso de no encontrarse este, trates de utilizar las net-tools (ifconfig). en el fondo, una versión actualizada de macchanger hace lo mismo que ifconfig xxxx hw ether, llamando a los mismos IOCTLS del kernel.