怎么用计算机ping组播地址,windows – 使用’目标主机无法访问’从同一台计算机ping“回复”(没有到其他计算机的路由)...

我在无线路由器后面的局域网中有两台计算机.

一个有XP的ip 192.168.1.2

这个有W7与IP 192.168.1.7

如果我试图从这台电脑ping另一个,我得到这个:

C:\Users\Srekel>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Reply from 192.168.1.7: Destination host unreachable.

Reply from 192.168.1.7: Destination host unreachable.

Reply from 192.168.1.7: Destination host unreachable.

Reply from 192.168.1.7: Destination host unreachable.

Ping statistics for 192.168.1.2:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Tracert给出了相同的结果:

C:\Users\Srekel>tracert 192.168.1.2

Tracing route to 192.168.1.2 over a maximum of 30 hops

1 Kakburken4 [192.168.1.7] reports: Destination host unreachable.

Trace complete.

虽然我可以毫无问题地ping和跟踪路由器.我已禁用两台计算机上的防火墙.路由器设置为使用DHCP(如果重要).

这是“路线”的输出.

C:\Users\Srekel>route print

===========================================================================

Interface List

13...00 25 86 df c6 89 ......TP-LINK Wireless N Adapter

12...e0 cb 4e 26 b9 84 ......Realtek PCIe GBE Family Controller #2

11...e0 cb 4e 26 be 94 ......Realtek PCIe GBE Family Controller

1...........................Software Loopback Interface 1

16...00 00 00 00 00 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux的ping命令的源代码可以在网络上进行查找和下载。以下是ping命令的基本源代码: ``` #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <sys/time.h> #include <errno.h> #include <signal.h> #define PACKET_SIZE 4096 #define MAX_WAIT_TIME 5 #define MAX_NO_PACKETS 3 char sendpacket[PACKET_SIZE]; char recvpacket[PACKET_SIZE]; int sockfd, datalen = 56; int nsend = 0, nreceived = 0; struct sockaddr_in dest_addr; pid_t pid; struct sockaddr_in from; void statistics(int signo); unsigned short cal_chksum(unsigned short *addr, int len); int main(int argc, char *argv[]) { struct hostent *host; struct timeval tv; struct timeval start, end; struct timezone tz; int n; unsigned char ttl = 64, loop = 1; bzero(&dest_addr, sizeof(dest_addr)); if(argc<2) { printf("usage:%s hostname/IP address\n", argv[0]); exit(1); } if((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { perror("socket"); exit(1); } pid = getpid(); setsockopt(sockfd, SOL_IP, IP_TTL, &ttl, sizeof(ttl)); setsockopt(sockfd, SOL_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); dest_addr.sin_family = AF_INET; if(inet_addr(argv[1]) == INADDR_NONE) { if((host = gethostbyname(argv[1])) == NULL) { perror("gethostbyname error"); exit(1); } memcpy((char *)&dest_addr.sin_addr, host->h_addr, host->h_length); } else dest_addr.sin_addr.s_addr = inet_addr(argv[1]); printf("PING %s (%s): %d data bytes\n", argv[1], inet_ntoa(dest_addr.sin_addr), datalen); tv.tv_sec = 5; tv.tv_usec = 0; setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); while(nsend < MAX_NO_PACKETS) { nsend++; gettimeofday(&start, &tz); memset(sendpacket, 0, sizeof(sendpacket)); memset(recvpacket, 0, sizeof(recvpacket)); struct icmp *icmp; icmp = (struct icmp*)sendpacket; icmp->icmp_type = ICMP_ECHO; icmp->icmp_code = 0; icmp->icmp_id = pid; icmp->icmp_seq = nsend; memset(icmp->icmp_data, '1', datalen); icmp->icmp_cksum = cal_chksum((unsigned short *)icmp, datalen + 8); if(sendto(sockfd, sendpacket, sizeof(sendpacket), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) < 0) { perror("sendto error"); continue; } if(recvfrom(sockfd, recvpacket, sizeof(recvpacket), 0, (struct sockaddr *)&from, &n) < 0) { perror("recvfrom error"); continue; } gettimeofday(&end, &tz); struct ip *ip; struct icmp *icmp_back; double rtt; int len = 0; ip = (struct ip*)recvpacket; len = ip->ip_hl * 4; icmp_back = (struct icmp*)(recvpacket + len); if((icmp_back->icmp_type == ICMP_ECHOREPLY) && (icmp_back->icmp_id == pid)) { nreceived++; printf("%d bytes from %s: icmp_seq=%u ttl=%d time=%.2f ms\n", datalen, inet_ntoa(from.sin_addr), icmp_back->icmp_seq, ip->ip_ttl, rtt); rtt = 1000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000; } else printf("receive packet error!\n"); sleep(1); } statistics(SIGALRM); return 0; } void statistics(int signo) { printf("\n%d packets transmitted, %d received, %%%d lost\n", nsend, nreceived, (nsend - nreceived) / nsend * 100); } unsigned short cal_chksum(unsigned short *addr, int len) { int nleft = len; int sum = 0; unsigned short *w = addr; unsigned short answer = 0; while(nleft > 1) { sum += *w++; nleft -= 2; } if(nleft == 1) { *(unsigned char *)(&answer) = *(unsigned char *)w; sum += answer; } sum = (sum >> 16) + (sum & 0xFFFF); sum += (sum >> 16); answer = ~sum; return answer; } ``` 这段代码实现了ping命令的基本功能,包括构建ICMP数据包、发送和接收数据包、计算RTT等。需要注意的是,此代码只作为示例,实际使用时可能需要根据具体需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值