WhereIsMSky WhereIsMSky
关注数: 12 粉丝数: 21 发帖数: 581 关注贴吧数: 45
求助关于PHP读取数据文件的问题 毕业设计是关于网络抓包分析的系统,PHP学的不好,有很多东西不太了解,只是在查阅了手册和参考了别人的一些程序后写了一些代码,主要功能是想把抓到的数据包在PHP服务器上完成解包和储存,读取的是CAP格式的文件,里面的数据是十六进制的,但是用fopen函数做了链接后,无论怎么读取,读取多少个字节,指针偏移量设置,最后转换成10进制后都是0,实在不知道为什么,有没有帮忙大神解决下这个问题? <?php @header('Content-type: text/html;charset=UTF-8'); $A=1; $address=$_POST['address']; echo $address; $name=$_POST['name']; echo $name; $con =@mysql_connect('localhost', 'root', 'meijingyu'); if (!$con) { die ('数据库出错'.mysql_error());}; $dbselect=@mysql_select_db("system",$con); @mysql_query("INSERT INTO tablename(name,time)VALUE('$name',now())",$con)or die(mysql_error()); $sql="CREATE TABLE $name (id int NOT NULL auto_increment, time int(32), length varchar(20), type varchar(20), typeversion varchar(20), IPlength varchar(20), 4typeversion varchar(20), S_ip varchar(20), D_ip varchar(20), S_port varchar(20), D_port varchar(20), PRIMARY KEY(`id`) )"; @mysql_query($sql,$con)or die(mysql_error()); echo "创建表成功"; $cap_file_header=array(); $cap_file_header[0]=$header_pass0_24; $cap_file_header[1]=$header_time_4; $cap_file_header[2]=$header_getEthernetlength_4;/*数据链路帧包抓取长度*/ $cap_file_header[3]=$header_truthEthernetlength_4;/*数据链路帧包的实际长度*/ $cap_file_header[4]=$Ethernet_soureceMAC_6;/*源物理地址*/ $cap_file_header[5]=$Ethernet_distinationMAC_6;/*目的物理地址*/ $cap_file_header[6]=$Ethernet_type_2;/*包内协议类型*/ $cap_file_header[7]=$Ethernet_version_1;/*协议版本*/ $cap_file_header[8]=$Ethernet_pass1_1;/*差分服务位*/ $cap_file_header[9]=$Ethernet_iplength_2;/*IP包的长度*/ $cap_file_header[10]=$Ethernet_pass3_3;/*鉴别码+拆分量*/ $cap_file_header[11]=$Ethernet_4thcontractversion_1;/*四层协议类型*/ $cap_file_header[12]=$Ethernet_pass4_2;/*头校验码*/ $cap_file_header[13]=$ip_soureceip_4;/*源IP地址*/ $cap_file_header[14]=$ip_distinationip_4;/*目的ip地址*/ $cap_file_header[15]=$tcp_soureceport_2; $cap_file_header[16]=$tcp_distinatport_2; $cap_file_header[17]=$tcp_pass5_2; $cap_file_header[18]=$tcp_tcpheaderlength_1; $cap_file_header[19]=$tcp_pass6_1; $cap_file_header[20]=$tcp_windowsize_2; $fp = fopen($address,"rb")or die("文件打开失败"); /* * 这段是测试的代码 * fseek($fp,100); $aaa=fread($fp,1); $bbb=base_convert($aaa, 2, 16); $bbb=unpack(`V`,$aaa); $startposition=ftell($fp); echo $bbb.$startposition;*/ while(feof($fp)){ $startposition=ftell($fp); if($startpostion==0){ fseek($fp,24,SEEK_CUR);} else{ $cap_file_header1_1=fread($fp, 1);//时间还需要高位取反 $cap_file_header1_2=fread($fp, 1); $cap_file_header1_3=fread($fp, 1); $cap_file_header1_4=fread($fp, 1); $cap_file_header[1]=$cap_file_header1_4.$cap_file_header1_3.$cap_file_header1_2.$cap_file_header1_1; $cap_file_header[1]=base_convert($cap_file_header[1], 16, 10)*1000; //$cap_file_header[1]=unixtojd($cap_file_header[1]); fseek($fp, 4,SEEK_CUR); $cap_file_header2_1=fread($fp, 1);//抓取的长度 $cap_file_header2_2=fread($fp, 1); $cap_file_header2_3=fread($fp, 1); $cap_file_header2_4=fread($fp, 1); $cap_file_header[2]=$cap_file_header2_4.$cap_file_header2_3.$cap_file_header2_2.$cap_file_header2_1; $cap_file_header[2]=base_convert($cap_file_header[2], 16, 10); $cap_file_header[3]=fread($fp, 4); $cap_file_header[4]=fread($fp, 6); $cap_file_header[5]=fread($fp, 6); $cap_file_header[6]=fread($fp, 2);//包内协议类型 if($cap_file_header[6]=0800){ $cap_file_header[6]=IP;} else{ $cap_file_header[6]=ARP;}; $cap_file_header[7]=fread($fp, 1);//包内协议版本 $cap_file_header[7]=base_convert($cap_file_header[7], 16, 10); fseek($fp, 1,SEEK_CUR); $cap_file_header[9]=fread($fp, 2);//ip包长度 $cap_file_header[9]=base_convert($cap_file_header[9], 16, 10); fseek($fp, 3,SEEK_CUR); $cap_file_header[11]=fread($fp, 1);//四层协议类型 $cap_file_header[11]=base_convert($cap_file_header[11], 16, 10); fseek($fp, 2,SEEK_CUR); $cap_file_header13_1=fread($fp, 1);//源ip地址 $cap_file_header13_1=base_convert($cap_file_header13_1, 16, 10); $cap_file_header13_2=fread($fp, 1); $cap_file_header13_2=base_convert($cap_file_header13_2, 16, 10); $cap_file_header13_3=fread($fp, 1); $cap_file_header13_3=base_convert($cap_file_header13_3, 16, 10); $cap_file_header13_4=fread($fp, 1); $cap_file_header13_4=base_convert($cap_file_header13_4, 16, 10); $cap_file_header[13]= $cap_file_header13_1.'.'.$cap_file_header13_2.'.'.$cap_file_header13_3.'.'.$cap_file_header13_4; $cap_file_header14_1=fread($fp, 1);//目的ip地址 $cap_file_header14_1=base_convert($cap_file_header14_1, 16, 10); $cap_file_header14_2=fread($fp, 1); $cap_file_header14_2=base_convert($cap_file_header14_2, 16, 10); $cap_file_header14_3=fread($fp, 1); $cap_file_header14_3=base_convert($cap_file_header14_3, 16, 10); $cap_file_header14_4=fread($fp, 1); $cap_file_header14_4=base_convert($cap_file_header14_4, 16, 10); $cap_file_header[14]=$cap_file_header14_1.'.'.$cap_file_header14_2.'.'.$cap_file_header14_3.'.'.$cap_file_header14_4; $cap_file_header[15]=fread($fp, 2);//源端口号 $cap_file_header[15]=base_convert($cap_file_header[15], 16, 10); $cap_file_header[16]=fread($fp, 2);//目的端口号 $cap_file_header[16]=base_convert($cap_file_header[16], 16, 10); fseek($fp, 2,SEEK_CUR); $cap_file_header[18]=fread($fp, 1);//tcp包头长度 $cap_file_header[18]=base_convert($cap_file_header[18], 16, 10); (int)$nowposition=ftell($fp);//计算当前位置 (int)$postionwork=24+$a*16+(int)$cap_file_header[2]; $A=$A++; (int)$B=$positonwork-$nowpositon; fseek($fp, $B,SEEK_CUR); $sqlinsert="INSERT INTO $name(time,length,type,typeversion,IPlength,4typeversion,S_ip,D_ip,S_port,D_port) VALUES ('$cap_file_header[1]','$cap_file_header[2]','$cap_file_header[6]','$cap_file_header[7]','$cap_file_header[9]','$cap_file_header[11]','$cap_file_header[13]','$cap_file_header[14]','$cap_file_header[15]'.'$cap_file_header[16]')"; mysql_query($sqlinsert,$con)or die(mysql_error()); }; }; mysql_close($con); echo "读取成功" ?>
1 下一页