P4wnP1_aloa/service/defaults.go
2018-12-07 00:59:54 +01:00

200 lines
6.4 KiB
Go

package service
import (
pb "github.com/mame82/P4wnP1_aloa/proto"
)
const (
DEFAULT_CDC_ECM_HOST_ADDR = "42:63:66:12:34:56"
DEFAULT_CDC_ECM_DEV_ADDR = "42:63:66:56:34:12"
DEFAULT_RNDIS_HOST_ADDR = "42:63:65:12:34:56"
DEFAULT_RNDIS_DEV_ADDR = "42:63:65:56:34:12"
USB_ETHERNET_BRIDGE_MAC = "24:22:26:12:14:16"
USB_ETHERNET_BRIDGE_NAME = "usbeth"
BT_ETHERNET_BRIDGE_MAC = "44:22:26:12:14:16"
BT_ETHERNET_BRIDGE_NAME = "bteth"
WIFI_ETHERNET_IFACE_NAME = "wlan0"
)
func GetDefaultBluetoothSettings() (*pb.BluetoothSettings) {
return &pb.BluetoothSettings{
Ci: &pb.BluetoothControllerInformation{
ServiceNetworkServerPanu: false,
ServiceNetworkServerGn: false,
ServiceNetworkServerNap: true,
Name: "P4wnP1",
CurrentSettings: &pb.BluetoothControllerSettings{
Powered: true,
Connectable: true,
Bondable: true,
Discoverable: true,
LowEnergy: false,
SecureSimplePairing: false, //we start with PIN based auth
HighSpeed: false, // not possible with SSP off
},
},
As: &pb.BluetoothAgentSettings{
Pin: "1337",
},
}
}
func GetDefaultNetworkSettingsBluetooth() (*pb.EthernetInterfaceSettings) {
ifSettings := &pb.EthernetInterfaceSettings{
Name: BT_ETHERNET_BRIDGE_NAME,
Enabled: true,
Mode: pb.EthernetInterfaceSettings_DHCP_SERVER,
IpAddress4: "172.26.0.1",
Netmask4: "255.255.255.0",
DhcpServerSettings: GetDefaultDHCPConfigBluetooth(),
}
return ifSettings
}
func GetDefaultNetworkSettingsUSB() (*pb.EthernetInterfaceSettings) {
//configure 172.24.0.1/255.255.255.252 for usbeth
ifSettings := &pb.EthernetInterfaceSettings {
Enabled: true,
Name: USB_ETHERNET_BRIDGE_NAME,
IpAddress4: "172.16.0.1",
Netmask4: "255.255.255.252",
Mode: pb.EthernetInterfaceSettings_DHCP_SERVER,
DhcpServerSettings: GetDefaultDHCPConfigUSB(),
}
return ifSettings
}
func GetDefaultNetworkSettingsWiFi() (*pb.EthernetInterfaceSettings) {
ifSettings := &pb.EthernetInterfaceSettings {
Enabled: true,
Name: WIFI_ETHERNET_IFACE_NAME,
Mode: pb.EthernetInterfaceSettings_DHCP_SERVER,
IpAddress4: "172.24.0.1",
Netmask4: "255.255.255.0",
DhcpServerSettings: GetDefaultDHCPConfigWiFi(),
}
return ifSettings
}
func GetDefaultDHCPConfigUSB() (settings *pb.DHCPServerSettings) {
settings = &pb.DHCPServerSettings{
//CallbackScript: "/bin/evilscript",
DoNotBindInterface: false, //only bind to given interface
ListenInterface: USB_ETHERNET_BRIDGE_NAME,
LeaseFile: nameLeaseFileDHCPSrv(USB_ETHERNET_BRIDGE_NAME),
ListenPort: 0, //No DNS, DHCP only
NotAuthoritative: false, //be authoritative
Ranges: []*pb.DHCPServerRange{
&pb.DHCPServerRange{RangeLower: "172.16.0.2", RangeUpper: "172.16.0.2", LeaseTime: "5m"},
//&pb.DHCPServerRange{RangeLower: "172.16.0.5", RangeUpper: "172.16.0.6", LeaseTime: "2m"},
},
Options: map[uint32]string{
//Note: Options 1 (Netmask), 12 (Hostname) and 28 (Broadcast Address) are still enabled
3: "", //Disable option: Router
6: "", //Disable option: DNS
//252: "http://172.16.0.1/wpad.dat",
},
}
return
}
// Important: An Android device wants to see a valid gateway+DNS in order to get bluetooth networking workable
// (otherwise no follow up communication would be possible, after the DHCP lease is assigned, according to my tests).
// If this condition is full filled, there seems to be no need for a real upstream connection, in order to reach the
// gateway IP (accessing P4wnP1 is possible in this case.
func GetDefaultDHCPConfigBluetooth() (settings *pb.DHCPServerSettings) {
settings = &pb.DHCPServerSettings{
//CallbackScript: "/bin/evilscript",
DoNotBindInterface: false, //only bind to given interface
ListenInterface: BT_ETHERNET_BRIDGE_NAME,
LeaseFile: nameLeaseFileDHCPSrv(BT_ETHERNET_BRIDGE_NAME),
ListenPort: 0, //No DNS, DHCP only
NotAuthoritative: false, //be authoritative
Ranges: []*pb.DHCPServerRange{
&pb.DHCPServerRange{RangeLower: "172.26.0.2", RangeUpper: "172.26.0.20", LeaseTime: "5m"},
},
Options: map[uint32]string{
3: "172.26.0.1", //Disable option: Router
6: "172.26.0.1", //Disable option: DNS
},
}
return
}
func GetDefaultDHCPConfigWiFi() (settings *pb.DHCPServerSettings) {
settings = &pb.DHCPServerSettings{
//CallbackScript: "/bin/evilscript",
DoNotBindInterface: false, //only bind to given interface
ListenInterface: WIFI_ETHERNET_IFACE_NAME,
LeaseFile: nameLeaseFileDHCPSrv(WIFI_ETHERNET_IFACE_NAME),
ListenPort: 0, //No DNS, DHCP only
NotAuthoritative: false, //be authoritative
Ranges: []*pb.DHCPServerRange{
&pb.DHCPServerRange{RangeLower: "172.24.0.2", RangeUpper: "172.24.0.20", LeaseTime: "5m"},
},
Options: map[uint32]string{
3: "", //Disable option: Router
6: "", //Disable option: DNS
},
}
return
}
func GetDefaultLEDSettings() (res *pb.LEDSettings) {
return &pb.LEDSettings{
BlinkCount: 254,
}
}
// Note: If no single function is enabled, the gadget mustn't be enabled itself in order to be deployable
func GetDefaultGadgetSettings() (res pb.GadgetSettings) {
res = pb.GadgetSettings{
Enabled: false,
Vid: "0x1d6b",
Pid: "0x1347",
Manufacturer: "MaMe82",
Product: "P4wnP1 by MaMe82",
Serial: "deadbeef1337",
Use_CDC_ECM: false,
Use_RNDIS: false,
Use_HID_KEYBOARD: false,
Use_HID_MOUSE: false,
Use_HID_RAW: false,
Use_UMS: false,
Use_SERIAL: false,
RndisSettings: &pb.GadgetSettingsEthernet{
HostAddr: DEFAULT_RNDIS_HOST_ADDR,
DevAddr: DEFAULT_RNDIS_DEV_ADDR,
},
CdcEcmSettings: &pb.GadgetSettingsEthernet{
HostAddr: DEFAULT_CDC_ECM_HOST_ADDR,
DevAddr: DEFAULT_CDC_ECM_DEV_ADDR,
},
UmsSettings: &pb.GadgetSettingsUMS{
File:"", //we don't supply an image file, which is no problem as it could be applied later on (removable media)
Cdrom:false, //By default we don't emulate a CD drive, but a flashdrive
},
}
return res
}
/*
func GetDefaultWiFiSettings() (res *pb.WiFiSettings) {
res = &pb.WiFiSettings{
Mode: pb.WiFiSettings_AP,
AuthMode: pb.WiFiSettings_WPA2_PSK,
Disabled: false,
Reg: "US",
ApChannel: 6,
ApHideSsid: false,
BssCfgAP: &pb.BSSCfg{
SSID: "P4wnP1",
PSK: "MaMe82-P4wnP1",
},
DisableNexmon: true,
BssCfgClient: nil, //not needed
}
return
}
*/