如何解决这段c++ 错误 编译后报错是 error C2143: syntax error : missing ';' before '.'
求高手帮忙修改一下错误地方主要可以#include"stdafx.h"#include<stdio.h>#include<winsock.h>#include<stdli...
求高手 帮忙修改一下 错误地方 主要可以
#include "stdafx.h"
#include <stdio.h>
#include <winsock.h>
#include<stdlib.h>
#pragma comment(lib,"wsock32.lib")
int main(int argc, char *argv[])
{
int err;
if(argc<4)
return 0;
///////////////////////////////////////////////////////
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
printf("no more socket resources\n");
return 1;
}
/////////////////////////////////////////////////////////////
struct sockaddr_in addr;
struct in_addr adr;
addr.sin_family =AF_INET;
addr.sin_port = htons(atoi(argv[3]));
err = connect(s,(struct sockaddr *)&addr, sizeof(addr));
unsigned long int iSIP = addr.sin_addr.s_addr = inet_addr(argv[1]);
unsigned long int iEIP = addr.sin_addr.s_addr = inet_addr(argv[2]);
iSIP = ntohl(iSIP);
iEIP = ntohl(iEIP);
for(; iSIP <=iEIP; iSIP++)
{
in_addr.s_addr = htonl(iSIP); //错误
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(adr),argv[3]);
else
printf("%s %s Open \n",inet_ntoa(adr),argv[3]);
}
return 0;
}
我主要可以再cmd输入
x 192.168.1.1 192.168.1.2 3389
这样可以扫描中间的IP 就可以了
百度别在删除了 我什么广告都没有 我就想解决一下我的问题 展开
#include "stdafx.h"
#include <stdio.h>
#include <winsock.h>
#include<stdlib.h>
#pragma comment(lib,"wsock32.lib")
int main(int argc, char *argv[])
{
int err;
if(argc<4)
return 0;
///////////////////////////////////////////////////////
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
printf("no more socket resources\n");
return 1;
}
/////////////////////////////////////////////////////////////
struct sockaddr_in addr;
struct in_addr adr;
addr.sin_family =AF_INET;
addr.sin_port = htons(atoi(argv[3]));
err = connect(s,(struct sockaddr *)&addr, sizeof(addr));
unsigned long int iSIP = addr.sin_addr.s_addr = inet_addr(argv[1]);
unsigned long int iEIP = addr.sin_addr.s_addr = inet_addr(argv[2]);
iSIP = ntohl(iSIP);
iEIP = ntohl(iEIP);
for(; iSIP <=iEIP; iSIP++)
{
in_addr.s_addr = htonl(iSIP); //错误
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(adr),argv[3]);
else
printf("%s %s Open \n",inet_ntoa(adr),argv[3]);
}
return 0;
}
我主要可以再cmd输入
x 192.168.1.1 192.168.1.2 3389
这样可以扫描中间的IP 就可以了
百度别在删除了 我什么广告都没有 我就想解决一下我的问题 展开
3个回答
展开全部
我也很奇怪,已经见过好几次了。
你后面循环那段完全不对,下面是正确代码。
struct sockaddr_in addr;
addr.sin_family =AF_INET;
addr.sin_port = htons(atoi(argv[3]));
unsigned long iSIP = inet_addr(argv[1]);
unsigned long iEIP = inet_addr(argv[2]);
unsigned long s1 = ntohl(iSIP);
unsigned long e1 = ntohl(iEIP);
for(; s1 <= e1; s1++)
{
addr.sin_addr.s_addr = ntohl(s1);
err = connect(s,(struct sockaddr *)&addr, sizeof(addr));
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(addr.sin_addr), argv[3]);
else
printf("%s %s Open \n",inet_ntoa(addr.sin_addr), argv[3]);
}
你后面循环那段完全不对,下面是正确代码。
struct sockaddr_in addr;
addr.sin_family =AF_INET;
addr.sin_port = htons(atoi(argv[3]));
unsigned long iSIP = inet_addr(argv[1]);
unsigned long iEIP = inet_addr(argv[2]);
unsigned long s1 = ntohl(iSIP);
unsigned long e1 = ntohl(iEIP);
for(; s1 <= e1; s1++)
{
addr.sin_addr.s_addr = ntohl(s1);
err = connect(s,(struct sockaddr *)&addr, sizeof(addr));
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(addr.sin_addr), argv[3]);
else
printf("%s %s Open \n",inet_ntoa(addr.sin_addr), argv[3]);
}
更多追问追答
追问
其实 我提问了很多次 都被删了所以老是没解决 今天有你帮助就OK咯
朋友 太谢谢你了 你可以注释一下 代码的意思吗
追答
你比较一下你自己的代码和这段代码,最大差别在于我把 赋值地址 和 connect 移到for 里面了。
unsigned long iSIP = inet_addr(argv[1]); // 将参数1转换成表示地址的长整数
unsigned long iEIP = inet_addr(argv[2]);
// 由于iSIP和iEIP的数值是高在前的字节序,所以ntohl将其转换成本机的字节序
// 这样才能正确数值循环
unsigned long s1 = ntohl(iSIP);
unsigned long e1 = ntohl(iEIP);
for(; s1 <= e1; s1++)
{
addr.sin_addr.s_addr = ntohl(s1); // 赋值需要连接的IP地址,这里需要把本机字节序转换回网络的字节序
err = connect(s,(struct sockaddr *)&addr, sizeof(addr)); // 连接目标主机
后面内容不解释了
展开全部
for(; iSIP <=iEIP; iSIP++)
{
adr.s_addr = htonl(iSIP); //错误 改为adr(变量),不能以结构体名做变量
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(adr),argv[3]);
else
printf("%s %s Open \n",inet_ntoa(adr),argv[3]);
}
{
adr.s_addr = htonl(iSIP); //错误 改为adr(变量),不能以结构体名做变量
if (err == INVALID_SOCKET)
printf("%s %s Close \n",inet_ntoa(adr),argv[3]);
else
printf("%s %s Open \n",inet_ntoa(adr),argv[3]);
}
追问
哇 成功了 朋友谢谢谢啦 的确好了
但是扫描出错误了 我有开放3389 他没说我没开放?
是不是哪里写错了?
F:\x\Debug>x 192.168.190.129 192.168.190.130 3389
192.168.190.129 3389 Close
192.168.190.130 3389 Close
其中的 192.168.190.129 这台电脑的3389 是有开放的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rcodnhjbdp/.fgkiltyu-p0l
追问
???/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询