有关EOFWord文档下载推荐.docx
《有关EOFWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《有关EOFWord文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
r"
dstfd=fopen(argv[2],"
w+"
if(copy_from_back(srcfd,dstfd)==-1)
copyerror:
"
exit(EXIT_FAILURE);
return0;
}
intcopy_from_back(FILE*srcfd,FILE*dstfd)
charch;
intnum_read=0;
if(srcfd==NULL||dstfd==NULL)
perror("
fopenerror:
return-1;
fseek(dstfd,0,SEEK_SET);
/*指向文件末尾,如果继续读,返回EOF*/
if(fseek(srcfd,1,SEEK_END)!
=0)
fseekerror"
}
else
begintoreadfile\n"
while(ftell(srcfd)>
0)
charch=fgetc(srcfd);
if(ch==EOF)
fileend!
\n"
fseek(srcfd,-2,SEEK_CUR);
continue;
putchar(ch);
fputc(ch,dstfd);
num_read++;
charstart=fgetc(srcfd);
putchar(start);
\nreadfileend:
%d\n"
num_read);
/*
fseek(srcfd,0,SEEK_SET);
while((ch=fgetc(srcfd))!
=EOF)
{
fseek(dstfd,1,SEEK_SET);
posted@2007-10-1818:
17吴剑阅读(98)|评论(0)|编辑收藏
main函数执行后执行的代码
如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。
voidfn1(void),fn2(void),fn3(void),fn4(void);
//atexit()以栈的方式注册函数,先注册的函数会后执行。
voidmain(void)
atexit(fn1);
atexit(fn2);
atexit(fn3);
atexit(fn4);
printf(“Thisisexecutedfirst.\n”);
return;
voidfn1()
printf(“next.\n”);
voidfn2()
printf(“executed”);
voidfn3()
printf(“is”);
voidfn4()
printf(“This”);
结果:
Thisisexecutedfirst.
Thisisexecutednext.
posted@2007-10-1621:
57吴剑阅读(105)|评论(0)|编辑收藏
另一个sinff抓包程序
linux下用socket的抓包程序
sys/socket.h>
netinet/in.h>
arpa/inet.h>
netinet/ip.h>
string.h>
netdb.h>
netinet/tcp.h>
netinet/udp.h>
unistd.h>
signal.h>
net/if.h>
sys/ioctl.h>
sys/stat.h>
fcntl.h>
linux/if_ether.h>
net/ethernet.h>
voiddie(char*why,intn)
{
perror(why);
exit(n);
}
intdo_promisc(char*nif,intsock)
structifreqifr;
strncpy(ifr.ifr_name,nif,strlen(nif)+1);
if((ioctl(sock,SIOCGIFFLAGS,&
ifr)==-1))//获得flag
die("
ioctl"
2);
ifr.ifr_flags|=IFF_PROMISC;
//重置flag标志
if(ioctl(sock,SIOCSIFFLAGS,&
ifr)==-1)//改变模式
3);
//修改网卡成PROMISC(混杂)模式
charbuf[40960];
main()
structsockaddr_inaddr;
structether_header*peth;
structiphdr*pip;
structtcphdr*ptcp;
structudphdr*pudp;
charmac[16];
inti,sock,r,len;
char*data;
char*ptemp;
charss[32],dd[32];
if((sock=socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL)))==-1)//建立socket
//mansocket可以看到上面几个宏的意思
socket"
1);
do_promisc("
eth0"
sock);
//eth0为网卡名称
system("
ifconfig"
for(;
;
)
len=sizeof(addr);
r=recvfrom(sock,(char*)buf,sizeof(buf),0,(structsockaddr*)&
addr,&
len);
//调试的时候可以增加一个输出r的语句判断是否抓到包
buf[r]=0;
ptemp=buf;
peth=(structether_header*)ptemp;
ptemp+=sizeof(structether_header);
//指针后移eth头的长度
pip=(structip*)ptemp;
//pip指向ip层的包头
ptemp+=sizeof(structip);
//指针后移ip头的长度
switch(pip->
protocol)//根据不同协议判断指针类型
caseIPPROTO_TCP:
ptcp=(structtcphdr*)ptemp;
//ptcp指向tcp头部
TCPpkt:
FORM:
[%s]:
[%d]\n"
inet_ntoa(*(structin_addr*)&
(pip->
saddr)),ntohs(ptcp->
source));
TO:
daddr)),ntohs(ptcp->
dest));
break;
caseIPPROTO_UDP:
pudp=(structudphdr*)ptemp;
//ptcp指向udp头部
UDPpkt:
\nlen:
%dpayloadlen:
%dfrom%s:
%dto%s:
%d\n"
r,
ntohs(pudp->
len),
inet_ntoa(*(structin_addr*)&
saddr)),
source),
daddr)),
dest)
);
caseIPPROTO_ICMP:
ICMPpkt:
%s\n"
saddr)));
caseIPPROTO_IGMP:
IGMPpkt:
default:
Unkownpkt,protocl:
pip->
protocol);
}//endswitch
perror("
dump"
[playmud@fc3test]$gcc-v
Readingspecsfrom/usr/lib/gcc/i386-redhat-linux/3.4.2/specs
Configuredwith:
../configure--prefix=/usr--mandir=/usr/share/man--infodir=/usr/share/info--enable-shar