如何解决这段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 就可以了
百度别在删除了 我什么广告都没有 我就想解决一下我的问题
展开
 我来答
百度网友6eab688
2012-08-08 · TA获得超过4692个赞
知道大有可为答主
回答量:962
采纳率:50%
帮助的人:951万
展开全部
我也很奇怪,已经见过好几次了。
你后面循环那段完全不对,下面是正确代码。

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)); // 连接目标主机

后面内容不解释了
水晶扇
2012-08-08 · TA获得超过1536个赞
知道大有可为答主
回答量:837
采纳率:100%
帮助的人:1108万
展开全部
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]);
}
追问
哇 成功了 朋友谢谢谢啦 的确好了
但是扫描出错误了 我有开放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 是有开放的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xyxxczk
2012-08-08
知道答主
回答量:9
采纳率:0%
帮助的人:4.1万
展开全部
rcodnhjbdp/.fgkiltyu-p0l
追问
???/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式