From 5e3c6366de47ada84933c6dd82c28a4045dbdbec Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 18 May 2020 02:54:28 +0200 Subject: tools: Make iproxy and inetcat use direct socket connection for network devices Instead of going through usbmuxd this change will have it connect directly to the device via network after retrieving its address from usbmuxd --- tools/inetcat.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'tools/inetcat.c') diff --git a/tools/inetcat.c b/tools/inetcat.c index d67e972..403c4ff 100644 --- a/tools/inetcat.c +++ b/tools/inetcat.c @@ -200,10 +200,42 @@ int main(int argc, char **argv) return 1; } - int devfd = usbmuxd_connect(dev->handle, device_port); + int devfd = -1; + if (dev->conn_type == CONNECTION_TYPE_NETWORK) { + unsigned char saddr_[32]; + memset(saddr_, '\0', sizeof(saddr_)); + struct sockaddr* saddr = (struct sockaddr*)&saddr_[0]; + if (((char*)dev->conn_data)[1] == 0x02) { // AF_INET + saddr->sa_family = AF_INET; + memcpy(&saddr->sa_data[0], (char*)dev->conn_data+2, 14); + } + else if (((char*)dev->conn_data)[1] == 0x1E) { //AF_INET6 (bsd) +#ifdef AF_INET6 + saddr->sa_family = AF_INET6; + memcpy(&saddr->sa_data[0], (char*)dev->conn_data+2, 26); +#else + fprintf(stderr, "ERROR: Got an IPv6 address but this system doesn't support IPv6\n"); + free(dev_list); + return 1; +#endif + } + else { + fprintf(stderr, "Unsupported address family 0x%02x\n", ((char*)dev->conn_data)[1]); + free(dev_list); + return 1; + } + char addrtxt[48]; + addrtxt[0] = '\0'; + if (!socket_addr_to_string(saddr, addrtxt, sizeof(addrtxt))) { + fprintf(stderr, "Failed to convert network address: %d (%s)\n", errno, strerror(errno)); + } + devfd = socket_connect_addr(saddr, device_port); + } else if (dev->conn_type == CONNECTION_TYPE_USB) { + devfd = usbmuxd_connect(dev->handle, device_port); + } free(dev_list); if (devfd < 0) { - fprintf(stderr, "Error connecting to device!\n"); + fprintf(stderr, "Error connecting to device: %s\n", strerror(errno)); return 1; } -- cgit v1.1-32-gdbae