c语言arp

用系统调用。

也就是

while(1)

{

系统(" ARP-d ");

}

就是这样。

c语言读取arp报文、加急、在线等的txt文件的特定行的特定字节! #包含stdio.h

//#包含字符串. h

const int MAXLINES = 1000

const int MAXLEN = 200

//用newch替换info[]中的oldch。

void replace(char info[],char oldch,char newch) {

int I = 0;

while(info[i]) {

if(info[I]= = old ch)info[I]= newch;

我;

}

}

int main() {

int n = 0;

char info[MAXLINES][MAXLEN],丢弃[MAXLEN];

FILE * infp

字符文件名[60];

Printf("文件名:");

scanf("%s ",文件名);

if((infp = fopen(filename," rt))= = NULL){

Printf("无法打开数据文件:%s\n ",文件名);

返回1;

}

While (fgets (discard,maxlen,infp)nmax lines){//读取一个空行。

fgets(discard,MAXLEN,infp);//阅读时间等信息行。

fscanf(infp," %s ",丢弃);//读取|0

fgets(info[n ],MAXLINES,infp);//读取有用的信息。请注意,最后一个有效字符可能是' \n '

}

fclose(infp);

返回0;

}

c语言中指针的定义 A是行指针,即指向包含三个int的一维数组的指针(地址是指针,A是指针常量,P是指针变量)。如果要给p赋值,就得用一个线指针来连接,所以你声明的p指向一个包含三个int的指针p;如果声明是int,

*p,p是int的指针,数据类型不匹配。

如果输出,可以这样做:p[i][j]。如其所说,A和P都是地址。如果A能做到,P也能。只是说明P是变量,A不是。

当然,你可以转过身去:

int * p;

p =(int *)a;

但是你的p是一个指向int的指针,

输出不能是那样的,相反:

printf(" % d " ,*(P3 * I j));

或者

printf("%d ",p[3 * I j]);

也就是把两个维度当成一个维度,直接看元素个数。

用C语言写模拟ARP发送请求包和接收包。 让我给你一个技术思路。

如果想用C模拟ARP发送和接收数据包,可以用VC6.0开发win32控制台应用程序,然后开发一个windows控制台程序,使用API函数。

用c语言写ARP欺骗 #包含stdafx.h

#包括“iostream”

#包含“fstream”

#包含“字符串”

#包含“windows.h”

#包含“Iphlpapi.h”

#pragma注释(lib," IpHlpApi.lib ")

#pragma注释(lib," ws2_32.lib ")

#定义MACFILE "mac.ini" //mac配置文件

#定义网关" gateway.ini"//网关地址文件

使用命名空间std

int main(int argc,char * argv[])

{

字符串ipadd

字符串macadd

char bc

//读取网关ip地址

fstream _ ipadd

_ipadd.open(GATEWAY,IOs::in);

while(_ipadd.get(bc))

{

ipadd = bc

}

cout“ARP欺骗检查工具by:nee ao \ n”;

Cout "网关IP:" ipadd endl;

int iReturn

DWORD dwIP

byMAC[6]字节;

DWORD dwLen

WSADATA WsaData

WSAStartup(MAKEWORD(2,0),wsa data);

dwIP = inet _ addr(ipadd . c _ str());

//cout dwIP " \ n ";

if (dwIP == INADDR_NONE)

{

cout”IP地址错误:“ipadd

返回1;

}

//循环获取mac地址

while(真)

{

//发送ARP查询包获取MAC地址。

dwLen = 6;

iReturn = SendARP(dwIP,0,(PULONG) byMAC,dwLen);

如果(iReturn!= NO_ERROR)

{

Printf("错误:只能获取当前网关下主机的MAC地址。\n ",argv[1]);

//_ _休假;

返回1;

}

char MACadd[50];

sprintf(MACadd," %.2X-%.2X-%.2X-%.2X-%.2X ",byMAC[0],byMAC[1],byMAC[2],byMAC[3],byMAC[4],by MAC[5]);

//cout MACadd;

//判断macadd是否为空,如果不是直接跳过。

if(macadd== " ")

{

fstream _ mac

_mac.open(MACFILE,IOs::in);

如果(!_mac)

{

//coutMACFILE“未创建”;

//第一次运行写入mac地址,这是初始mac地址。

fstream _ macr

_macr.open(MACFILE,IOs::out | IOs::app);

如果(!_macr)

{

Cout "文件创建失败,磁盘不可写或文件是只读的!";

出口(1);

}

_ macr MACadd

_ macr . close();

macadd = MACadd

}

其他

{

char ch

字符串内容;

while(_mac.get(ch))

{

内容= ch

}

_ MAC . close();

macadd =内容;

cout”MAC地址为:“content endl

}

}

//判断mac地址

if(macadd==MACadd)

{

cout " ok \ n

//返回1;

}否则

{

cout“MAC地址已被修改\ n”;

//返回1;

}

睡眠(2000);//每2秒获取一次

}

返回0;

}

相关文章

发表新评论