2013-10-10 51 views
0

我試圖ping我的網絡上的所有IP地址。我能夠得到我的IP現在即時通訊設法ping我的網絡中的所有其他IP。我有這個IP xxx.xxx.xxx.121,我必須ping xxx.xxx.xxx.1到xxx.xxx.xxx.255.Im使用簡單的方式。如何ping特定端口的ipaddress ios應用

for (int i = 0; i<256; i++) { 
     NSString *str = [NSString stringWithFormat:@"%@.%i",searchingIp,i]; 
     NSLog(@"ipStr:%@",str); 

     const char *address = [str UTF8String]; 
     NSLog(@"%s",address); 

     struct sockaddr_in callAddress; 
     callAddress.sin_len = sizeof(callAddress); 
     callAddress.sin_family = AF_INET; 
     callAddress.sin_port = htons(49160); 
     callAddress.sin_addr.s_addr = inet_addr(address); 

     NSLog(@"%s:%d",inet_ntoa(((struct sockaddr_in*)&callAddress)->sin_addr),((struct sockaddr_in*)&callAddress)->sin_port); 


     simplePing = [SimplePing simplePingWithHostAddress:[NSData dataWithBytes:&callAddress length:sizeof(callAddress)]]; 
     simplePing.delegate = self; 
     [simplePing start]; 
    } 

我也試着設置端口「49160」,但它仍然顯示2240 林在這種類型的東西還挺新。

+0

嘗試使用'ntohs()'將端口號轉換回您的'NSLog'語句中的主機格式。 – rmaddy

回答

0

你說你正在使用蘋果編寫的SimplePing例子(https://developer.apple.com/library/mac/samplecode/SimplePing/Introduction/Intro.html

然後,我覺得這是一個methond,允許您使用主機名initalize它:

+ (SimplePing *)simplePingWithHostName:(NSString *)hostName 

然後它應該比較容易寫的東西,如:

for (int i = 0; i<256; i++) { 
     NSString *str = [NSString stringWithFormat:@"%@.%i",searchingIp,i]; 
     NSLog(@"ipStr:%@",str); 

     simplePing = [SimplePing simplePingWithHostName:str]; 
     simplePing.delegate = self; 
     [simplePing start]; 
    } 

BTW,ICMP不是TCP/UDP,所以我不認爲這是有口抽象,但消息類型,如回聲。

+0

感謝您的幫助。 – jyce1492