starlink sppedtest
starlink sppedtest





注:有些手机APP会判断当前设备的GPS位置,如果不在指定国家区域内,可能会禁止使用。
例如:抖音直播 或 微信直播 会禁止在国外地区用户开视频直播。
{
"device": {
"app": {
"version": "2.0.31",
"environment": "production",
"build": "12134",
"hash": "9b904f2",
"timestamp": 1652745219,
"features": [
"local_management"
]
},
"platform": {
"os": "web"
},
"timestamp": 1699924023,
"uptime": 560,
"wifi": {
"ipAddress": "unknown",
"ssid": null
},
"sensors": {},
"memory": -1,
"name": "unknown",
"model": "unknown",
"deviceId": "unknown",
"network": {
"netinfo": {
"isInternetReachable": true,
"isConnected": true,
"type": "other",
"details": {
"isConnectionExpensive": false
}
},
"publicIp": "206.83.124.54"
},
"location": {}
},
"router": {
"reachable": true,
"service": "router",
"cloud": false,
"features": {
"speedTest": true,
"speedTestLive": true,
"wifiSpeedTest": true,
"clientHistory": true
},
"timestamp": 1699924023,
"deviceInfo": {
"id": "Router-0100000000000000006293B9",
"hardwareVersion": "v2",
"softwareVersion": "2023.51.0.mr29388",
"manufacturedVersion": "2022.25.0.mr15341",
"countryCode": "",
"utcOffsetS": 0,
"softwarePartitionsEqual": true,
"isDev": false,
"bootcount": 6,
"antiRollbackVersion": 1,
"isHitl": false,
"boot": {
"countByReasonMap": [
[
0,
2
],
[
1,
1
],
[
2,
2
],
[
4,
1
]
],
"countByReasonDeltaMap": [],
"lastReason": 0,
"lastCount": 6
}
},
"deviceState": {
"uptimeS": 4886
},
"captivePortalEnabled": false,
"ipv4WanAddress": "206.83.124.54/23",
"pingDropRate": 0,
"pingLatencyMs": 46.5,
"alerts": {
"thermalThrottle": false,
"installPending": false,
"freshlyFused": false,
"lanEthSlowLink10": false,
"lanEthSlowLink100": false,
"inconsistent2ghzAntennaePerformance15db": false,
"inconsistent5ghzAntennaePerformance15db": false,
"poor2ghzAntennaePerformance80db": false,
"poor5ghzAntennaePerformance80db": false
},
"metadata": {
"endpoint": "http://192.168.1.1:9001",
"endpoints": [
"http://192.168.1.1:9001"
]
}
},
"dish": {
"reachable": true,
"service": "dish",
"cloud": false,
"features": {
"stowRequested": true,
"unstow": true
},
"timestamp": 1699924023,
"deviceInfo": {
"id": "ut01000000-00000000-003b23e0",
"hardwareVersion": "hp1_proto1",
"softwareVersion": "5a923943-5acb-4d05-ac58-dd93e72b7862.uterm.release",
"manufacturedVersion": "",
"countryCode": "",
"utcOffsetS": 28801,
"softwarePartitionsEqual": false,
"isDev": false,
"bootcount": 8,
"antiRollbackVersion": 0,
"isHitl": false
},
"deviceState": {
"uptimeS": 4879
},
"alerts": {
"motorsStuck": false,
"thermalThrottle": false,
"thermalShutdown": false,
"mastNotNearVertical": false,
"unexpectedLocation": false,
"slowEthernetSpeeds": false,
"roaming": true,
"installPending": false,
"isHeating": false
},
"gpsStats": {
"gpsValid": true,
"gpsSats": 16
},
"secondsToFirstNonemptySlot": 0,
"popPingDropRate": 0,
"downlinkThroughputBps": 39441600,
"uplinkThroughputBps": 620790.5625,
"popPingLatencyMs": 39.14285659790039,
"obstructionStats": {
"currentlyObstructed": false,
"fractionObstructed": 0,
"validS": 912,
"wedgeFractionObstructedList": [],
"wedgeAbsFractionObstructedList": [],
"avgProlongedObstructionDurationS": 0,
"avgProlongedObstructionIntervalS": null,
"avgProlongedObstructionValid": false
},
"stowRequested": false,
"boresightAzimuthDeg": 117.9831314086914,
"boresightElevationDeg": 83.91061401367188,
"ethSpeedMbps": 1000,
"mobilityClass": 2,
"isSnrAboveNoiseFloor": true
},
"meshNodes": [
{
"name": "Controller",
"ipAddress": "",
"channelWidth": 0,
"associatedTimeS": 0,
"modeStr": "",
"iface": 1,
"snr": 0,
"psmode": 0,
"role": 3,
"deviceId": "Router-0100000000000000006293B9",
"swqChecks": 0,
"swqChecksNonEmpty": 0,
"signalStrength": 0,
"macAddress": "74:24:9f:f2:93:b9",
"upstreamMacAddress": "",
"isMyClient": false
}
],
"wifiConfig": {
"countryCode": "",
"setupComplete": true,
"applySetupComplete": false,
"version": 7,
"macWan": "74:24:9f:e2:93:b9",
"macLan": "74:24:9f:f2:93:b9",
"channel2ghz": 0,
"applyChannel2ghz": false,
"channel5ghz": 0,
"applyChannel5ghz": false,
"meshConfigsMap": [],
"meshConfigsUpdatesMap": [],
"applyMeshConfigs": false,
"dynamicKeysList": [],
"applyDynamicKeys": false,
"isRepeater": false,
"applyIsRepeater": false,
"isAviation": false,
"applyIsAviation": false,
"bootCount": 6,
"boot": {
"countByReasonMap": [
[
0,
2
],
[
1,
1
],
[
2,
2
],
[
4,
1
]
],
"countByReasonDeltaMap": [],
"lastReason": 0,
"lastCount": 6
},
"nameserversList": [],
"applyNameservers": false,
"bypassMode": false,
"applyBypassMode": false,
"dfsEnabled": false,
"applyDfsEnabled": false,
"networksList": [
{
"ipv4": "192.168.1.1/24",
"basicServiceSetsList": [
{
"bssid": "76:63:f9:2a:ad:89",
"ssid": "STARLINK",
"authWpa2": {
"password": "••••••••"
},
"band": 2,
"disable": false,
"hidden": false
},
{
"bssid": "76:63:f9:3a:ad:89",
"ssid": "STARLINK",
"authWpa2": {
"password": "••••••••"
},
"band": 5,
"disable": false,
"hidden": false
}
]
}
],
"applyNetworks": false,
"networkName": "",
"applyNetworkName": false,
"applyNetworkPassword": false,
"lanIpv4": "",
"applyLanIpv4": false,
"wifiSecurity": 0,
"applyWifiSecurity": false,
"networkName5ghz": "",
"applyNetworkName5ghz": false,
"enableRemoteSsh": false,
"applyEnableRemoteSsh": false,
"lastRemoteSshAccess": 0,
"incarnation": 9890595704395182000,
"wirelessMode2ghz": 0,
"applyWirelessMode2ghz": false,
"wirelessMode5ghz": 0,
"applyWirelessMode5ghz": false,
"htBandwidth2ghz": 0,
"applyHtBandwidth2ghz": false,
"htBandwidth5ghz": 0,
"applyHtBandwidth5ghz": false,
"vhtBandwidth": 0,
"applyVhtBandwidth": false
}
}
参考项目 https://github.com/sparky8512/starlink-grpc-tools
本项目中的脚本使用 TCP 端口 9200 连接到 Starlink dish 上运行的 gRPC 服务。
Starlink Android 应用程序,以及该应用程序的其他版本,实际上使用端口 9201 而不是 9200。两者似乎都公开了相同的 gRPC 服务,但端口 9201 上的服务使用 gRPC-Web,该服务可以使用 HTTP/1.1,而端口 9200 上的服务使用 HTTP/2,这是大多数 gRPC 工具所期望的。
Starlink 路由器还在端口 9000 (HTTP/2.0) 和 9001 (HTTP/1.1) 上公开了 gRPC 服务。
本页列出了该项目的用户可能感兴趣的一些命令。grpcurl
以下命令执行与脚本中的作相同的作。dish_control.py
重新启动盘子:
grpcurl -plaintext -d {\"reboot\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
收起盘子:
grpcurl -plaintext -d {\"dish_stow\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
解开盘子:
grpcurl -plaintext -d {\"dish_stow\":{\"unstow\":true}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
从碟形天线获取 GPS(纬度/经度/Alt)数据:
grpcurl -plaintext -emit-defaults -d '{"getLocation":{}}' 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
如果您想浏览 dish 使用的 gRPC 协议,您可以使用以下命令列出可用的协议。
要从顶部开始,您可以列出可用的服务:
grpcurl -plaintext 192.168.100.1:9200 list
SpaceX.API.Device.Device grpc.reflection.v1alpha.ServerReflection
然后列出相关服务中的方法:
grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Device
SpaceX.API.Device.Device is a service:
service Device {
rpc Handle ( .SpaceX.API.Device.Request ) returns ( .SpaceX.API.Device.Response );
rpc Stream ( stream .SpaceX.API.Device.ToDevice ) returns ( stream .SpaceX.API.Device.FromDevice );
}
相关方法是 ,它采用单个请求消息,并根据发出的请求返回特定的响应消息。Handle
要列出可能的请求:
grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Request
SpaceX.API.Device.Request is a message:
message Request {
uint64 id = 1;
string target_id = 13;
uint64 epoch_id = 14;
oneof request {
.SpaceX.API.Device.SignedData signed_request = 15;
.SpaceX.API.Device.RebootRequest reboot = 1001;
.SpaceX.API.Device.SpeedTestRequest speed_test = 1003;
.SpaceX.API.Device.GetStatusRequest get_status = 1004;
.SpaceX.API.Device.AuthenticateRequest authenticate = 1005;
.SpaceX.API.Device.GetNextIdRequest get_next_id = 1006;
.SpaceX.API.Device.GetHistoryRequest get_history = 1007;
.SpaceX.API.Device.GetDeviceInfoRequest get_device_info = 1008;
.SpaceX.API.Device.GetPingRequest get_ping = 1009;
.SpaceX.API.Device.SetTrustedKeysRequest set_trusted_keys = 1010;
.SpaceX.API.Device.FactoryResetRequest factory_reset = 1011;
.SpaceX.API.Device.GetLogRequest get_log = 1012;
.SpaceX.API.Device.SetSkuRequest set_sku = 1013;
.SpaceX.API.Device.UpdateRequest update = 1014;
.SpaceX.API.Device.GetNetworkInterfacesRequest get_network_interfaces = 1015;
.SpaceX.API.Device.PingHostRequest ping_host = 1016;
.SpaceX.API.Device.GetLocationRequest get_location = 1017;
.SpaceX.API.Device.GetHeapDumpRequest get_heap_dump = 1019;
.SpaceX.API.Device.RestartControlRequest restart_control = 1020;
.SpaceX.API.Device.FuseRequest fuse = 1021;
.SpaceX.API.Device.GetPersistentStatsRequest get_persistent_stats = 1022;
.SpaceX.API.Device.GetConnectionsRequest get_connections = 1023;
.SpaceX.API.Device.StartSpeedtestRequest start_speedtest = 1027;
.SpaceX.API.Device.GetSpeedtestStatusRequest get_speedtest_status = 1028;
.SpaceX.API.Device.ReportClientSpeedtestRequest report_client_speedtest = 1029;
.SpaceX.API.Device.InitiateRemoteSshRequest initiate_remote_ssh = 1030 [deprecated = true];
.SpaceX.API.Device.SelfTestRequest self_test = 1031;
.SpaceX.API.Device.SetTestModeRequest set_test_mode = 1032;
.SpaceX.API.Device.SoftwareUpdateRequest software_update = 1033;
.SpaceX.API.Device.EnableDebugTelemRequest enable_debug_telem = 1034;
.SpaceX.API.Device.DishStowRequest dish_stow = 2002;
.SpaceX.API.Device.DishGetContextRequest dish_get_context = 2003;
.SpaceX.API.Device.DishSetEmcRequest dish_set_emc = 2007;
.SpaceX.API.Device.DishGetObstructionMapRequest dish_get_obstruction_map = 2008;
.SpaceX.API.Device.DishGetEmcRequest dish_get_emc = 2009;
.SpaceX.API.Device.DishSetConfigRequest dish_set_config = 2010;
.SpaceX.API.Device.DishGetConfigRequest dish_get_config = 2011;
.SpaceX.API.Device.StartDishSelfTestRequest start_dish_self_test = 2012;
.SpaceX.API.Device.DishPowerSaveRequest dish_power_save = 2013;
.SpaceX.API.Device.DishInhibitGpsRequest dish_inhibit_gps = 2014;
.SpaceX.API.Device.WifiSetConfigRequest wifi_set_config = 3001;
.SpaceX.API.Device.WifiGetClientsRequest wifi_get_clients = 3002;
.SpaceX.API.Device.WifiSetupRequest wifi_setup = 3003;
.SpaceX.API.Device.WifiGetPingMetricsRequest wifi_get_ping_metrics = 3007;
.SpaceX.API.Device.WifiGetDiagnosticsRequest wifi_get_diagnostics = 3008;
.SpaceX.API.Device.WifiGetConfigRequest wifi_get_config = 3009;
.SpaceX.API.Device.WifiSetMeshDeviceTrustRequest wifi_set_mesh_device_trust = 3012;
.SpaceX.API.Device.WifiSetMeshConfigRequest wifi_set_mesh_config = 3013 [deprecated = true];
.SpaceX.API.Device.WifiGetClientHistoryRequest wifi_get_client_history = 3015;
.SpaceX.API.Device.WifiSetAviationConformedRequest wifi_set_aviation_conformed = 3016;
.SpaceX.API.Device.WifiSetClientGivenNameRequest wifi_set_client_given_name = 3017;
.SpaceX.API.Device.WifiSelfTestRequest wifi_self_test = 3018;
.SpaceX.API.Device.TransceiverIFLoopbackTestRequest transceiver_if_loopback_test = 4001;
.SpaceX.API.Device.TransceiverGetStatusRequest transceiver_get_status = 4003;
.SpaceX.API.Device.TransceiverGetTelemetryRequest transceiver_get_telemetry = 4004;
}
reserved 1018, 1025, 1026, 3011, 3014;
}
以及相应的回应:
grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.Response
SpaceX.API.Device.Response is a message:
message Response {
uint64 id = 1;
.SpaceX.API.Status.Status status = 2;
uint64 api_version = 3;
oneof response {
.SpaceX.API.Device.RebootResponse reboot = 1001;
.SpaceX.API.Device.SpeedTestResponse speed_test = 1003;
.SpaceX.API.Device.GetDeviceInfoResponse get_device_info = 1004;
.SpaceX.API.Device.GetNextIdResponse get_next_id = 1006;
.SpaceX.API.Device.GetPingResponse get_ping = 1009;
.SpaceX.API.Device.SetTrustedKeysResponse set_trusted_keys = 1010;
.SpaceX.API.Device.FactoryResetResponse factory_reset = 1011;
.SpaceX.API.Device.GetLogResponse get_log = 1012;
.SpaceX.API.Device.SetSkuResponse set_sku = 1013;
.SpaceX.API.Device.UpdateResponse update = 1014;
.SpaceX.API.Device.GetNetworkInterfacesResponse get_network_interfaces = 1015;
.SpaceX.API.Device.PingHostResponse ping_host = 1016;
.SpaceX.API.Device.GetLocationResponse get_location = 1017;
.SpaceX.API.Device.GetHeapDumpResponse get_heap_dump = 1019;
.SpaceX.API.Device.RestartControlResponse restart_control = 1020;
.SpaceX.API.Device.FuseResponse fuse = 1021;
.SpaceX.API.Device.GetConnectionsResponse get_connections = 1023;
.SpaceX.API.Device.StartSpeedtestResponse start_speedtest = 1027;
.SpaceX.API.Device.GetSpeedtestStatusResponse get_speedtest_status = 1028;
.SpaceX.API.Device.ReportClientSpeedtestResponse report_client_speedtest = 1029;
.SpaceX.API.Device.InitiateRemoteSshResponse initiate_remote_ssh = 1030 [deprecated = true];
.SpaceX.API.Device.SelfTestResponse self_test = 1031;
.SpaceX.API.Device.SetTestModeResponse set_test_mode = 1032;
.SpaceX.API.Device.SoftwareUpdateResponse software_update = 1033;
.SpaceX.API.Device.EnableDebugTelemResponse enable_debug_telem = 1034;
.SpaceX.API.Device.DishStowResponse dish_stow = 2002;
.SpaceX.API.Device.DishGetContextResponse dish_get_context = 2003;
.SpaceX.API.Device.DishGetStatusResponse dish_get_status = 2004;
.SpaceX.API.Device.DishAuthenticateResponse dish_authenticate = 2005;
.SpaceX.API.Device.DishGetHistoryResponse dish_get_history = 2006;
.SpaceX.API.Device.DishSetEmcResponse dish_set_emc = 2007;
.SpaceX.API.Device.DishGetObstructionMapResponse dish_get_obstruction_map = 2008;
.SpaceX.API.Device.DishGetEmcResponse dish_get_emc = 2009;
.SpaceX.API.Device.DishSetConfigResponse dish_set_config = 2010;
.SpaceX.API.Device.DishGetConfigResponse dish_get_config = 2011;
.SpaceX.API.Device.StartDishSelfTestResponse start_dish_self_test = 2012;
.SpaceX.API.Device.DishInhibitGpsResponse dish_inhibit_gps = 2013;
.SpaceX.API.Device.WifiSetConfigResponse wifi_set_config = 3001;
.SpaceX.API.Device.WifiGetClientsResponse wifi_get_clients = 3002;
.SpaceX.API.Device.WifiSetupResponse wifi_setup = 3003;
.SpaceX.API.Device.WifiGetStatusResponse wifi_get_status = 3004;
.SpaceX.API.Device.WifiAuthenticateResponse wifi_authenticate = 3005;
.SpaceX.API.Device.WifiGetHistoryResponse wifi_get_history = 3006;
.SpaceX.API.Device.WifiGetPingMetricsResponse wifi_get_ping_metrics = 3007;
.SpaceX.API.Device.WifiGetDiagnosticsResponse wifi_get_diagnostics = 3008;
.SpaceX.API.Device.WifiGetConfigResponse wifi_get_config = 3009;
.SpaceX.API.Device.WifiSetMeshDeviceTrustResponse wifi_set_mesh_device_trust = 3012;
.SpaceX.API.Device.WifiSetMeshConfigResponse wifi_set_mesh_config = 3013 [deprecated = true];
.SpaceX.API.Device.WifiGetClientHistoryResponse wifi_get_client_history = 3015;
.SpaceX.API.Device.WifiSelfTestResponse wifi_self_test = 3016;
.SpaceX.API.Device.WifiGetPersistentStatsResponse wifi_get_persistent_stats = 3022;
.SpaceX.API.Device.TransceiverIFLoopbackTestResponse transceiver_if_loopback_test = 4001;
.SpaceX.API.Device.TransceiverGetStatusResponse transceiver_get_status = 4003;
.SpaceX.API.Device.TransceiverGetTelemetryResponse transceiver_get_telemetry = 4004;
}
reserved 1018, 1026, 2025, 3011, 3014;
}
然后,您可以继续描述各个请求或响应,例如:
grpcurl -plaintext 192.168.100.1:9200 describe SpaceX.API.Device.DishGetStatusResponse
SpaceX.API.Device.DishGetStatusResponse is a message:
message DishGetStatusResponse {
.SpaceX.API.Device.DeviceInfo device_info = 1;
.SpaceX.API.Device.DeviceState device_state = 2;
float seconds_to_first_nonempty_slot = 1002;
float pop_ping_drop_rate = 1003;
.SpaceX.API.Device.DishObstructionStats obstruction_stats = 1004;
.SpaceX.API.Device.DishAlerts alerts = 1005;
float downlink_throughput_bps = 1007;
float uplink_throughput_bps = 1008;
float pop_ping_latency_ms = 1009;
bool stow_requested = 1010;
float boresight_azimuth_deg = 1011;
float boresight_elevation_deg = 1012;
.SpaceX.API.Device.DishOutage outage = 1014;
.SpaceX.API.Device.DishGpsStats gps_stats = 1015;
int32 eth_speed_mbps = 1016;
.SpaceX.API.Device.UserMobilityClass mobility_class = 1017;
bool is_snr_above_noise_floor = 1018;
.SpaceX.API.Device.DishReadyStates ready_states = 1019;
.SpaceX.API.Device.UserClassOfService class_of_service = 1020;
.SpaceX.API.Device.SoftwareUpdateState software_update_state = 1021;
bool is_snr_persistently_low = 1022;
.SpaceX.API.Device.HasActuators has_actuators = 1023;
.SpaceX.API.Satellites.Network.UtDisablementCode disablement_code = 1024;
.SpaceX.API.Device.DishConfig config = 2000;
reserved 1001, 1006, 1013;
}
请注意,并非所有请求都在 dish 上实现。有些特定于路由器,有些只是未实现,有些失败并显示“未授权”错误。另请注意,即使是已实现的请求也可能具有未实现的单个字段,因此将始终返回字段数据类型的默认值。
# 获取设备信息
grpcurl -plaintext -d {\"get_device_info\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
{
"apiVersion": "7",
"getDeviceInfo": {
"deviceInfo": {
"id": "ut01000000-00000000-008dbe32",
"hardwareVersion": "hp1_proto1",
"softwareVersion": "8cd5bb78-2b4d-46d4-95e0-a4cda85b39e0.uterm.release",
"utcOffsetS": 28801,
"bootcount": 73,
"generationNumber": "1682632632"
}
}
}
# 获取设备状态
grpcurl -plaintext -d {\"get_status\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
{
"apiVersion": "7",
"dishGetStatus": {
"deviceInfo": {
"id": "ut01000000-00000000-008dbe32",
"hardwareVersion": "hp1_proto1",
"softwareVersion": "8cd5bb78-2b4d-46d4-95e0-a4cda85b39e0.uterm.release",
"utcOffsetS": 28801,
"bootcount": 73,
"generationNumber": "1682632632"
},
"deviceState": {
"uptimeS": "231"
},
"secondsToFirstNonemptySlot": -1,
"popPingDropRate": 1,
"obstructionStats": {
"avgProlongedObstructionIntervalS": "NaN"
},
"alerts": {},
"uplinkThroughputBps": 17473.47,
"popPingLatencyMs": -1,
"outage": {
"cause": "NO_SCHEDULE",
"startTimestampNs": "1426487650180216211",
"durationNs": "190440032034"
},
"gpsStats": {
"gpsValid": true,
"gpsSats": 5
},
"ethSpeedMbps": 100,
"readyStates": {
"cady": true,
"scp": true,
"l1l2": true,
"xphy": true,
"aap": true,
"rf": true
},
"softwareUpdateState": "IDLE"
}
}
# 获取定位信息
grpcurl -plaintext -d {\"get_location\":{}} 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
ERROR:
Code: PermissionDenied
Message: GetLocation requests are not enabled on this device
# 获取定位信息
grpcurl -plaintext -emit-defaults -d '{"getLocation":{}}' 192.168.100.1:9200 SpaceX.API.Device.Device/Handle
Error invoking method "SpaceX.API.Device.Device/Handle": error getting request data: invalid character '\'' looking for beginning of value
========== End

浙公网安备 33010602011771号