2013-01-10 49 views
5

Tôi muốn thực hiện ping với thời gian chờ và TTL. Tôi sử dụng mã của Apple ("Simple Ping"). Tôi đọc nó "iOS ping with timeout". Tôi thay đổi mã:Thời gian chờ của thẻ ping và ttl của iOS

CFSocketNativeHandle sock = CFSocketGetNative(self->_socket); 
struct timeval tv; 
tv.tv_sec = 0; 
tv.tv_usec = 100000; // 0.1 sec 
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, sizeof(tv)); 

bytesSent = sendto(
    sock, 
    [packet bytes], 
    [packet length], 
    0, 
    (struct sockaddr *) [self.hostAddress bytes], 
    (socklen_t) [self.hostAddress length] 
); 

Nhưng tôi không hiểu nơi tôi nên đặt mã sẽ hiển thị thời gian chờ nhận gói. Ngoài ra tôi cần phải thực hiện ping với thông tin TTL (thời gian để sống). Tôi muốn nhận thông tin dựa trên mô hình này: icmp_seq=count from=ip_address ttl=value_of_ttl time=value_of_replytime_ms

Trả lời

-1

Bạn luôn có thể đặt một số thời hạn trên receivefrom:

 tv.tv_sec = 0; 
     tv.tv_usec = 10000; 
     setsockopt(recv_sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval)); 
0

Để sửa đổi TTL mặc định trong IP Header, gọi setsockopt với IP_TTL như tham số (thử nghiệm với IPv4):

- (BOOL)setTTL:(int)ttl{ 
 
    CFSocketNativeHandle sock = CFSocketGetNative(self->_socket); 
 
    int status = setsockopt(sock, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)); 
 
    if(status < 0) 
 
    { 
 
     return NO; 
 
    } 
 
    return YES; 
 
}

Các "iOS ping with timeout" cũ dồi dào thêm thời gian chờ đầu ra vào ổ cắm. Từ những gì tôi hiểu, nó sẽ hết thời gian nếu gói tin không được gửi bởi socket trong thời gian này. Tôi có thể sai, nhưng tôi không thể tìm thấy giá trị "thời gian chờ" này từ tiêu đề ICMP và tiêu đề IPv4 (ICMP Packet format). Dưới đây là giao diện điều khiển đăng nhập và yêu cầu, gói tin trả lời chụp sử dụng ping đơn giản táo:

enter image description here

enter image description here

enter image description here

Nếu bạn chỉ muốn biết thời gian phản ứng của ping, tôi đoán bạn có thể tự theo dõi nó trong các phương thức đại biểu. Nhận dấu thời gian khi các hàm "didSendPacket" và "didReceivePingResponsePacket" được gọi và sau đó so sánh sự khác biệt.

Các vấn đề liên quan