扫描网段找出树莓派IP

网上的教程大多用的是Advanced IP Scanner v2,但实际使用过程中,还是有一部分IP通过这个工具无法扫出来

笔者推荐使用SoftPerfect Network Scanner,这个软件不需要安装,是绿色版的,最新版本为6.1.4

为了准确的扫描到22端口,需要进行一些配置

Options--Program Options,点击Ports选项卡,选上Check for open TCP ports,填端口号22,然后选上Display service names rather than port number点击OK

然后确定要扫描的网段范围,点击网卡工具图标,选择要使用哪个网卡扫描,选上之后,界面会自动填写扫描范围。

然后点击Starting Scaning按钮开始扫描

程序默认的线程数是50,比Advanced IP Scanner v2扫描快。

这次扫描总共用了6分钟,扫描的IP数为16*255个,扫描到AP下有24个设备连接。其中开放22端口的是172.26.67.183和172.26.74.119。所以树莓派的IP就是这两个中的一个。用ssh登录一下就知道了。扫描IP的方法不时候IP范围过大的场合。

在C语言中,可以使用socket编程来扫描网段内的IP地址。 以下是一个简单的示例程序,它使用Winsock库来创建一个UDP套接字,并使用gethostbyname函数来获取本机的IP地址。 ``` #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("WSAStartup failed!\n"); return 1; } char hostname[256]; if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) { printf("Error getting hostname: %d\n", WSAGetLastError()); WSACleanup(); return 1; } struct hostent *host = gethostbyname(hostname); if (host == NULL) { printf("Error getting hostent: %d\n", WSAGetLastError()); WSACleanup(); return 1; } char *ip = inet_ntoa(*(struct in_addr *)*host->h_addr_list); printf("Local IP address: %s\n", ip); char subnet[16]; sprintf(subnet, "%s%s", ip, "0/24"); int i; for (i = 1; i < 255; i++) { char target[16]; sprintf(target, "%s%d", subnet, i); printf("Scanning %s...\n", target); SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) { printf("Error creating socket: %d\n", WSAGetLastError()); continue; } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(1234); addr.sin_addr.s_addr = inet_addr(target); char buf[1024] = "Hello"; int len = sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&addr, sizeof(addr)); if (len == SOCKET_ERROR) { printf("Error sending packet: %d\n", WSAGetLastError()); closesocket(s); continue; } struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (const char *)&tv, sizeof(tv)) < 0) { printf("Error setting socket option: %d\n", WSAGetLastError()); closesocket(s); continue; } char recvbuf[1024]; int recvlen = sizeof(addr); len = recvfrom(s, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&addr, &recvlen); if (len == SOCKET_ERROR) { printf("Host %s is not responding.\n", target); } else { printf("Host %s is online.\n", target); } closesocket(s); } WSACleanup(); return 0; } ``` 该程序通过循环扫描网段内的所有IP地址,使用UDP协议发送一个Hello消息,并等待1秒钟以获取响应。如果目标主机响应,则将其标记为在线。否则,它将被标记为离线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值