Я попытался подключить метод подключения сокета iOS, чтобы получить информацию о подключенных портах между локальным хостом и удаленным сервером.Hook iOS BSD socket connect метод для получения локального и удаленного порта
Однако из гнезда struct sockaddr
sa_family
всегда AF_SYSTEM
(сообщение о событии ядра).
код Hood:
int (*origin_connect)(int socket, const struct sockaddr *address, socklen_t address_len);
int replaced_connect(int socket, const struct sockaddr *address, socklen_t address_len) {
int r = origin_connect(socket, address, address_len);
sa_family_t f = address->sa_family;
NSLog(@"CONNECT FAMILY %d", f);
if (f == AF_INET) {
struct sockaddr_in *addr = (struct sockaddr_in *)address;
NSString *remote_ip = [[NSString alloc]initWithCString:inet_ntoa(addr->sin_addr) encoding:NSUTF8StringEncoding];
uint16_t remote_port = ntohs(addr -> sin_port);
NSLog(@"The CONNECT ip = %@ port = %u", remote_ip, remote_port);
struct sockaddr local_address;
socklen_t addr_size = sizeof(local_address);
getsockname(socket, &local_address, &addr_size);
struct sockaddr_in *laddr = (struct sockaddr_in*)&local_address;
NSString *local_ip = [[NSString alloc]initWithCString:inet_ntoa(laddr->sin_addr) encoding:NSUTF8StringEncoding];
uint16_t local_port = ntohs(laddr->sin_port);
NSLog(@"The CONNECT Local ip = %@ port = %u", local_ip, local_port);
} else if (f == AF_SYSTEM) {
NSLog(@"hello there :(");
struct sockaddr_ctl * ctl = (struct sockaddr_ctl *)address;
}
return r;
}
ли я зацепить неправильный метод или есть ли другой способ, чтобы получить информацию, связанные портов?
Какой процесс вы пытаетесь подключить? – creker