青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪了。
 
今日:0    总帖:362
admin
5673
一、什么是CURL?cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。二、CURL函数库。curl_close — 关闭一个curl会话curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数curl_errno — 返回一个包含当前会话错误信息的数字编号curl_error — 返回一个包含当前会话错误信息的字符串curl_exec — 执行一个curl会话curl_getinfo — 获取一个curl连接资源句柄的信息curl_init — 初始化一个curl会话curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源curl_multi_close — 关闭一个批处理句柄资源curl_multi_exec — 解析一个curl批处理句柄curl_multi_getcontent — 返回获取的输出的文本流curl_multi_info_read — 获取当前解析的curl的相关传输信息curl_multi_init — 初始化一个curl批处理句柄资源curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源curl_multi_select — Get all the sockets associated with the cURL extension, which can then be “selected”curl_setopt_array — 以数组的形式为一个curl设置会话参数curl_setopt — 为一个curl设置会话参数curl_version — 获取curl相关的版本信息curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。三、PHP建立CURL请求的基本步骤①:初始化curl_init()②:设置属性curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。③:执行并获取结果curl_exec()④:释放句柄curl_close()四、CURL实现GET和POST①:GET方式实现<?php //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 print_r($data); ?>运行结果:②:POST方式实现<?php //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 $post_data = array( "username" => "coder", "password" => "12345" ); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 print_r($data); ?>③:如果获得的数据时json格式的,使用json_decode函数解释成数组。$output_array = json_decode($output,true);如果使用json_decode($output)解析的话,将会得到object类型的数据。五、我自己封装的一个函数//参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的$cookies,参数4:是否返回$cookies function curl_request($url,$post='',$cookie='', $returnCookie=0){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_AUTOREFERER, 1); curl_setopt($curl, CURLOPT_REFERER, "http://XXX"); if($post) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post)); } if($cookie) { curl_setopt($curl, CURLOPT_COOKIE, $cookie); } curl_setopt($curl, CURLOPT_HEADER, $returnCookie); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); if (curl_errno($curl)) { return curl_error($curl); } curl_close($curl); if($returnCookie){ list($header, $body) = explode("\r\n\r\n", $data, 2); preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches); $info['cookie'] = substr($matches[1][0], 1); $info['content'] = $body; return $info; }else{ return $data; } }附可选参数说明:第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值:选项可选value值备注CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置header中的Referer:信息。CURLOPT_BINARYTRANSFER在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。CURLOPT_COOKIESESSION启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。CURLOPT_CRLF启用时将Unix的换行符转换成回车换行符。CURLOPT_DNS_USE_GLOBAL_CACHE启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认启用。CURLOPT_FAILONERROR显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息。CURLOPT_FILETIME启用时会尝试修改远程文档中的信息。结果信息会通过 curl_getinfo()函数的CURLINFO_FILETIME选项返回。curl_getinfo().CURLOPT_FOLLOWLOCATION启用时会将服务器服务器返回的”Location: “放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。CURLOPT_FORBID_REUSE在完成交互以后强迫断开连接,不能重用。CURLOPT_FRESH_CONNECT强制获取一个新的连接,替代缓存中的连接。CURLOPT_FTP_USE_EPRT启用时当FTP下载时,使用EPRT (或 LPRT)命令。设置为FALSE时禁用EPRT和LPRT,使用PORT命令 only.CURLOPT_FTP_USE_EPSV启用时,在FTP传输过程中回复到PASV模式前首先尝试EPSV命令。设置为FALSE时禁用EPSV命令。CURLOPT_FTPAPPEND启用时追加写入文件而不是覆盖它。CURLOPT_FTPASCIICURLOPT_TRANSFERTEXT的别名。CURLOPT_FTPLISTONLY启用时只列出FTP目录的名字。CURLOPT_HEADER启用时会将头文件的信息作为数据流输出。CURLINFO_HEADER_OUT启用时追踪句柄的请求字符串。从 PHP 5.1.3 开始可用。CURLINFO_前缀是故意的(intentional)。CURLOPT_HTTPGET启用时会设置HTTP的method为GET,因为GET是默认是,所以只在被修改的情况下使用。CURLOPT_HTTPPROXYTUNNEL启用时会通过HTTP代理来传输。CURLOPT_MUTE启用时将cURL函数中所有修改过的参数恢复默认值。CURLOPT_NETRC在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。CURLOPT_NOBODY启用时将不对HTML中的BODY部分进行输出。CURLOPT_NOPROGRESS启用时关闭curl传输的进度条,此项的默认设置为启用。Note:PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。CURLOPT_NOSIGNAL启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。cURL 7.10时被加入。CURLOPT_POST启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。CURLOPT_PUT启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE。CURLOPT_RETURNTRANSFER将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。CURLOPT_SSL_VERIFYPEER禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。自cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。CURLOPT_TRANSFERTEXT启用后对FTP传输使用ASCII模式。对于LDAP,它检索纯文本信息而非HTML。在Windows系统上,系统不会把STDOUT设置成binary模式。CURLOPT_UNRESTRICTED_AUTH在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。CURLOPT_UPLOAD启用后允许文件上传。CURLOPT_VERBOSE启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。第二类:对于下面的这些option的可选参数,value应该被设置一个integer类型的值:选项可选value值备注CURLOPT_BUFFERSIZE每次获取的数据中读入缓存的大小,但是不保证这个值每次都会被填满。在cURL 7.10中被加入。CURLOPT_CLOSEPOLICY不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY_,但是cURL暂时还不支持。CURLOPT_CONNECTTIMEOUT在发起连接前等待的时间,如果设置为0,则无限等待。CURLOPT_CONNECTTIMEOUT_MS尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。CURLOPT_DNS_CACHE_TIMEOUT设置在内存中保存DNS信息的时间,默认为120秒。CURLOPT_FTPSSLAUTHFTP验证方式:CURLFTPAUTH_SSL (首先尝试SSL),CURLFTPAUTH_TLS (首先尝试TLS)或CURLFTPAUTH_DEFAULT (让cURL自动决定)。在cURL 7.12.2中被加入。CURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_NONE (默认值,让cURL自己判断使用哪个版本),CURL_HTTP_VERSION_1_0 (强制使用 HTTP/1.0)或CURL_HTTP_VERSION_1_1 (强制使用 HTTP/1.1)。CURLOPT_HTTPAUTH使用的HTTP验证方法,可选的值有:CURLAUTH_BASIC、CURLAUTH_DIGEST、CURLAUTH_GSSNEGOTIATE、CURLAUTH_NTLM、CURLAUTH_ANY和CURLAUTH_ANYSAFE。可以使用|位域(或)操作符分隔多个值,cURL让服务器选择一个支持最好的值。CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.CURLOPT_INFILESIZE设定上传文件的大小限制,字节(byte)为单位。CURLOPT_LOW_SPEED_LIMIT当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。CURLOPT_LOW_SPEED_TIME当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。CURLOPT_MAXCONNECTS允许的最大连接数量,超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接。CURLOPT_MAXREDIRS指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。CURLOPT_PORT用来指定连接端口。(可选项)CURLOPT_PROTOCOLSCURLPROTO_*的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见CURLOPT_REDIR_PROTOCOLS.可用的协议选项为:CURLPROTO_HTTP、CURLPROTO_HTTPS、CURLPROTO_FTP、CURLPROTO_FTPS、CURLPROTO_SCP、CURLPROTO_SFTP、CURLPROTO_TELNET、CURLPROTO_LDAP、CURLPROTO_LDAPS、CURLPROTO_DICT、CURLPROTO_FILE、CURLPROTO_TFTP、CURLPROTO_ALL在cURL 7.19.4中被加入。CURLOPT_PROXYAUTHHTTP代理连接的验证方式。使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项。对于代理验证只有CURLAUTH_BASIC和CURLAUTH_NTLM当前被支持。在cURL 7.10.7中被加入。CURLOPT_PROXYPORT代理服务器的端口。端口也可以在CURLOPT_PROXY中进行设置。CURLOPT_PROXYTYPE不是CURLPROXY_HTTP (默认值) 就是CURLPROXY_SOCKS5。在cURL 7.10中被加入。CURLOPT_REDIR_PROTOCOLSCURLPROTO_*中的位域值。如果被启用,位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议。这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILE和SCP之外的全部协议。这个和7.19.4预发布版本种无条件地跟随所有支持的协议有一些不同。关于协议常量,请参照CURLOPT_PROTOCOLS。在cURL 7.19.4中被加入。CURLOPT_RESUME_FROM在恢复传输时传递一个字节偏移量(用来断点续传)。CURLOPT_SSL_VERIFYHOST1 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。2 检查公用名是否存在,并且是否与提供的主机名匹配。CURLOPT_SSLVERSION使用的SSL版本(2 或 3)。默认情况下PHP会自己检测这个值,尽管有些情况下需要手动地进行设置。CURLOPT_TIMECONDITION如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过,则使用CURL_TIMECOND_IFMODSINCE返回页面,如果没有被修改过,并且CURLOPT_HEADER为true,则返回一个”304 Not Modified”的header,        CURLOPT_HEADER为false,则使用CURL_TIMECOND_IFUNMODSINCE,默认值为CURL_TIMECOND_IFUNMODSINCE。CURLOPT_TIMEOUT设置cURL允许执行的最长秒数。CURLOPT_TIMEOUT_MS设置cURL允许执行的最长毫秒数。在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。CURLOPT_TIMEVALUE设置一个CURLOPT_TIMECONDITION使用的时间戳,在默认状态下使用的是CURL_TIMECOND_IFMODSINCE。第三类:对于下面的这些option的可选参数,value应该被设置一个string类型的值:选项可选value值备注CURLOPT_CAINFO一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。 .CURLOPT_CAPATH一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。CURLOPT_COOKIE设定HTTP请求中”Cookie: “部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, “fruit=apple; colour=red”)。CURLOPT_COOKIEFILE包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。CURLOPT_COOKIEJAR连接结束后保存cookie信息的文件。CURLOPT_CUSTOMREQUEST使用一个自定义的请求信息来代替”GET”或”HEAD”作为HTTP请求。这对于执行”DELETE” 或者其他更隐蔽的HTTP请求。有效值如”GET”,”POST”,”CONNECT”等等。也就是说,不要在这里输入整个HTTP请求。例如输入”GET /index.html HTTP/1.0\r\n\r\n”是不正确的。Note:在确定服务器支持这个自定义请求的方法前不要使用。CURLOPT_EGDSOCKET类似CURLOPT_RANDOM_FILE,除了一个Entropy Gathering Daemon套接字。CURLOPT_ENCODINGHTTP请求头中”Accept-Encoding: “的值。支持的编码有”identity”,”deflate”和”gzip”。如果为空字符串””,请求头会发送所有支持的编码类型。在cURL 7.10中被加入。CURLOPT_FTPPORT这个值将被用来获取供FTP”POST”指令所需要的IP地址。”POST”指令告诉远程服务器连接到我们指定的IP地址。这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个’-’来使用默认的IP地址。CURLOPT_INTERFACE网络发送接口名,可以是一个接口名、IP地址或者是一个主机名。CURLOPT_KRB4LEVELKRB4 (Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序):”clear”、”safe”、”confidential”、”private”.。如果字符串和这些都不匹配,将使用”private”。这个选项设置为NULL时将禁用KRB4 安全认证。目前KRB4 安全认证只能用于FTP传输。CURLOPT_POSTFIELDS全部数据使用HTTP协议中的”POST”操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似’para1=val1¶2=val2&…’或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。CURLOPT_PROXYHTTP代理通道。CURLOPT_PROXYUSERPWD一个用来连接到代理的”[username]:[password]“格式的字符串。CURLOPT_RANDOM_FILE一个被用来生成SSL随机数种子的文件名。CURLOPT_RANGE以”X-Y”的形式,其中X和Y都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如”X-Y,N-M”。CURLOPT_REFERER在HTTP请求头中”Referer: “的内容。CURLOPT_SSL_CIPHER_LIST一个SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表。CURLOPT_SSLCERT一个包含PEM格式证书的文件名。CURLOPT_SSLCERTPASSWD使用CURLOPT_SSLCERT证书需要的密码。CURLOPT_SSLCERTTYPE证书的类型。支持的格式有”PEM” (默认值), “DER”和”ENG”。在cURL 7.9.3中被加入。CURLOPT_SSLENGINE用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。CURLOPT_SSLENGINE_DEFAULT用来做非对称加密操作的变量。CURLOPT_SSLKEY包含SSL私钥的文件名。CURLOPT_SSLKEYPASSWD在CURLOPT_SSLKEY中指定了的SSL私钥的密码。Note:由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。CURLOPT_SSLKEYTYPECURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为”PEM”(默认值)、”DER”和”ENG”。CURLOPT_URL需要获取的URL地址,也可以在 curl_init()函数中设置。CURLOPT_USERAGENT在HTTP请求中包含一个”User-Agent: “头的字符串。CURLOPT_USERPWD传递一个连接中需要的用户名和密码,格式为:”[username]:[password]“。第四类对于下面的这些option的可选参数,value应该被设置一个数组:选项可选value值备注CURLOPT_HTTP200ALIASES200响应码数组,数组中的响应吗被认为是正确的响应,否则被认为是错误的。在cURL 7.10.3中被加入。CURLOPT_HTTPHEADER一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array(‘Content-type: text/plain’, ‘Content-length: 100′)CURLOPT_POSTQUOTE在FTP请求执行完成后,在服务器上执行的一组FTP命令。CURLOPT_QUOTE一组先于FTP请求的在服务器上执行的FTP命令。对于下面的这些option的可选参数,value应该被设置一个流资源 (例如使用 fopen()):选项可选value值CURLOPT_FILE设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。CURLOPT_INFILE在上传文件的时候需要读取的文件地址,值是一个资源类型。CURLOPT_STDERR设置一个错误输出地址,值是一个资源类型,取代默认的STDERR。CURLOPT_WRITEHEADER设置header部分内容的写入的文件地址,值是一个资源类型。对于下面的这些option的可选参数,value应该被设置为一个回调函数名:选项可选value值CURLOPT_HEADERFUNCTION设置一个回调函数,这个函数有两个参数,第一个是cURL的资源句柄,第二个是输出的header数据。header数据的输出必须依赖这个函数,返回已写入的数据大小。CURLOPT_PASSWDFUNCTION设置一个回调函数,有三个参数,第一个是cURL的资源句柄,第二个是一个密码提示符,第三个参数是密码长度允许的最大值。返回密码的值。CURLOPT_PROGRESSFUNCTION设置一个回调函数,有三个参数,第一个是cURL的资源句柄,第二个是一个文件描述符资源,第三个是长度。返回包含的数据。CURLOPT_READFUNCTION拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此函数,将自行处理返回的数据。返回值为数据大小,以字节计。返回0代表EOF信号。CURLOPT_WRITEFUNCTION拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为精确的已写入字符串长度。发生错误时传输线程终止。本文链接:http://www.blogfshare.com/php-curl-get-post.html
开发 2 0 2721天前
admin
7844
原文地址:http://blog.csdn.net/ibingow/article/details/7104346 经常碰到某些程序崩溃时弹出带红色叉叉的错误窗口或者是叫你选择调试或关闭的窗口,很碍眼。不过平时也没去理它,点掉就好。    今天客户反映我们的程序崩溃后就起不来了,其实我们为了方便无人化管理,做了一个守护进程。如果程序异常退出就会重启那个程序,这在linux下没问题,程序崩溃了就直接退出返回非零值,但是window就bug了,搞不好就给你弹出个错误对话框,你不点掉其实程序就没退出,守护进程就不知道这个程序是否崩溃,于是这个程序就永远死在那个窗口上了。现在这不仅碍眼,还碍事!于是着手摆平之。    先是晚上搜到可以修改注册表来组织程序或系统的弹出对话框,参考:http://technet.microsoft.com/en-us/library/cc976167.aspx。不过这不可行,我们只是希望我们的程序不会弹出对话框,尽量少改系统的。而且试了下发现还是会弹出来,就是那个werfault.exe进程,xp下可能不会。算了,这条路不走了。    用代码肯定也有办法解决。你看人家qq什么的奔溃了有弹出的都是自家的温馨提示,我们不需要温馨提示,只要返回非零值就好。    万能的Google一下子就搜出结果来了。原来Microsoft对c和c++进行了扩展,支持异常处理,而且貌似标准c++里的异常处理也是它的一个封装。Microsoft的异常处理函数是__try,__except。先试了这么个简单的例子 #include <windows.h> #include <excpt.h> #include <stdio.h> #define CRASH_SILENTLY 1 #if defined(_MSC_VER) && CRASH_SILENTLY #include <excpt.h> #define Q_TRY_BEGIN __try { #define Q_TRY_END } //EXCEPTION_EXECUTE_HANDLER #define Q_EXCEPT __except(EXCEPTION_EXECUTE_HANDLER) { \ printf("Shit happens!\n");fflush(NULL); \ return 1;} #else #define Q_TRY_BEGIN #define Q_TRY_END #define Q_EXCEPT #endif int main(int, char**) { Q_TRY_BEGIN int *a = 0; *a = 0; Q_TRY_END Q_EXCEPT printf("Exiting 0...\n"); fflush(NULL); return 0; }     如果把CRASH_SILENTLY定义为0,那么在程序崩溃就会弹出对话框,设为一就只打印Shit happens!然后就返回。    __except的参数有三种,详细内容见http://msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspx,我就不抄了。    其实为什么系统会弹出这么一个对话框呢?其实在vc运行库中顶层函数也用了__try, __except的异常捕获机制。不知您看了__except的参数了没,我的示例程序里是EXCEPTION_EXECUTE_HANDLER,表示异常被识别,就在__except后面的代码段进行异常处理。如果是EXCEPTION_CONTINUE_SEARCH,那么异常会继续被派发到外层,这最外层就是vc库,vc库它的处理手段就是碍眼又碍事的对话框!    上面这个程序只是演示用的,很简单。然后我就满怀希望地对公司的程序也做了类似的处理,然后悲剧发生了,竟然编译都通不过!编译错误是C2712:cannot use __try in functions that require object unwinding。于是又google了一番。msdn真的很棒,资料丰富,这下有时msdn上的方法解决的。详见http://msdn.microsoft.com/en-us/library/xwtb73ad%28VS.80%29.aspx    With /EHsc, a function with structured exception handling cannot have objects that require unwinding (destruction).    我们的程序里出现了有析构函数的对象,同时编译参数又有/EHsc,于是出现编译错误了。可以参考下这篇文章http://se.csai.cn/ExpertEyes/No163.htm    作为一个例子,如果我们把上面的程序改成下面的就可能出现上述问题class Shit { public: Shit() {} ~Shit() {} }; int main(int, char**) { Q_TRY_BEGIN Shit s; int *a = 0; *a = 0; Q_TRY_END Q_EXCEPT printf("Exiting 0...\n"); fflush(NULL); return 0; }     msdn提出3种方案,允许我复制下    Move code that requires SEH to another function.    Rewrite functions that use SEH to avoid the use of local variables and parameters that have destructors. Do not use SEH in constructors or destructors.    Compile without /EHsc.    显然前两种办法对代码改动太大了,不可取,那么就去掉/EHsc吧。由于我是用Qt写程序,有些编译选项都是默认设好的,我在pro文件里尝试定义QMAKE_CXXFLAGS竟然无效,不是很清楚为什么。一般是在qmake.config和prf文件里里可以找到。qmake.conf里找到相关的两行 QMAKE_CXXFLAGS_STL_ON = -EHsc QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc 在我们工程文件里直接设这两个为空竟然可以。后来又看了下Makefile,发现生成Makefile会依赖exceptions.prf, stl.prf,而这两个会加入上面两个变量,比如stl.prf:CONFIG -= stl_off QMAKE_CFLAGS *= $QMAKE_CFLAGS_STL_ON QMAKE_CXXFLAGS *= $QMAKE_CXXFLAGS_STL_ON 于是在工程文件中加入CONFIG -= exceptions stl 或者CONFIG += exceptions_off stl_off 就解决问题了,而且比之前的方法优雅。看看Makefile里相关代码变成了$(QMAKE) -spec ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\default CONFIG+=release -o Makefile pvplayer.pro ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\qconfig.pri: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\modules\qt_webkit_version.pri: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\qt_functions.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\qt_config.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\exclusive_builds.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\default_pre.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\default_pre.prf: ..\config.pri: ..\pvcommon\pvcommon.pri: ..\config.pri: ..\log4qt\log4qt.pri: ..\config.pri: ..\qextserialport\qextserialport.pri: ..\config.pri: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\release.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\debug_and_release.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\default_post.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\default_post.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\rtti.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\shared.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\embed_manifest_exe.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\embed_manifest_dll.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\warn_on.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\qt.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\thread.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\moc.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\windows.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\stl_off.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\win32\exceptions_off.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\resources.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\uic.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\yacc.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\lex.prf: ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\msvc2008\mkspecs\features\incredibuild_xge.prf: e:\QtSDK\Desktop\Qt\4.7.4\msvc2008\lib\qtmain.prl:     好,至此已经把弹出对话框的问题解决了。不过还值得深入研究,目前只是做到了会用的程度。还有就是linux下或其他平台上有无类似处理还没调查。应该也有,因为最近linux下的thunderbird一启动就崩溃,弹出对话框。有空继续研究。参考文献:http://msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspxhttp://msdn.microsoft.com/en-us/library/xwtb73ad%28VS.80%29.aspxUse /EHa if you want to catch an exception raised with something other than a throw.http://msdn.microsoft.com/en-us/library/1deeycx5%28VS.80%29.aspxhttp://blog.csdn.net/bichenggui/article/details/4536534http://se.csai.cn/ExpertEyes/No163.htm
开发 2 0 2721天前
admin
7127
      原文地址:https://mp.weixin.qq.com/s/NnZQLuDDTSEqKuKXs_WvLg      相信大家最近都已经知道了这个Intel CPU的漏洞,目前微软、Linux等都已经针对各自发布了相对应的补丁,那么如何检查是否已经安装了呢      微软还发布了一套例程,可以用于检查更新是否被正确安装,或者是否需要额外的更新。   在Powershell启动之前,确保你使用管理员权限启动程序,保证你有足够的权限安装所需的模块。   下面的Powershell指令将安装一个Powershell模块,用于测试Meltdown和Spectre漏洞Install-Module SpeculationControl   如果你运行上述命令后,得到一个执行错误,则可能需要调整Powershell的执行策略。运行以下命令:Set-ExecutionPolicy Bypass   现在你可以运行第二个实际检查系统的Powershelli年命令:Get-SpeculationControlSettings   Google表示,大部分的CPU都容易受到Metldown和Spectre漏洞的攻击。如果上述命令的输出结果中有很多红色的文字,说明你的系统受到威胁。           下一步是打开Windows Update并按下“检查更新”按钮,直到你收到Meltdown/Spectre补丁。根据上文所述,对于使用了“有问题”的AV程序的用户,可能需要等待几天时间。       更新之后,您需要再次运行Get-SpeculationControlSettings。有两种可能的情况。常见的情况是以下结果:    上图意味着你的系统已经修复了Meltdown漏洞,但未能完全修复Spectre程序。正如Google所说,这是意料之中的,Spectre很难利用,但也很难修补。 红色文本意味着你需要额外的芯片组固件更新。微软和谷歌表示,OEM厂商将需要为用户提供这些额外的更新,来完成Windows系统级别Spectre漏洞的完整修复。由于计算机的使用年限,某些OEM厂商可能无法提供这些固件更新,这意味着你将无法完整修复Spectre漏洞。 如果一些正常,所有的检查结果将显示为绿色文本,如下所示:完成之后,请注意将Powershell的执行策略修改为限制模式,这可以缓解Powershell执行恶意命令。Set-ExecutionPolicy Restricted
教程与文档 2 0 2728天前
admin
6924
您需要登录并回复后才可以查看该文章内容
工具 2 1 2732天前
admin
13593
原文地址:https://jingyan.baidu.com/article/046a7b3ef6b250f9c27fa9b9.html 首先,我们要先把水印模板给做出来。新建一张5厘米*5厘米的透明图层。点击“文件”->“新建。在弹出的对话框中宽度设为5厘米,高度也设为“5厘米”,背景内容设为“透明”,接着点“确定”。 2.    2  选择“横排文字工具”,把字体设为“楷体”,大小设为“30点”,文字颜色就不要紧了,反正待会要清空文字的。输文字的目的只是为了给文字描上一层灰色的边,我们要的是那层"边"。 3.    3  打完文字后,先不急着描边,先把文字放斜点。按一下“Ctrl+T”,进入“自由变换”模式,在文字的周围“按住鼠标左键就可以旋转文字”,按“回车键”退出自由变换模式。 4.    4  现在该给文字描边了,描边就是沿着字体的周围涂一层不厚也不薄的颜色,我们最后看到的水印其实就是这层边来的,一般的水印都是灰色的,好,我们就给文字描一层灰色的边。点击“添加图层样式∫X”->“描边”,进入“图层样式”对话框,大小为3像素,位置为外部,不透明度为100%,这些都按默认就行了。我们关键是要设置颜色。绝对不是要“黑色”,点击“黑色”部分进入“选取描边颜色”对话框。 5.    5  我们来到了“选取描边颜色”对话框,这里可以设置世界上会任何一种颜色,要对应的RGB码或LAB码,如果没有,那就到软件自带的“颜色库”里选取。拖动鼠标就能选到灰色。如果实在选不到,直接输入L=83,a=0,b=2也行。然后一路点“确定”就OK了。 6.    6  描完边后就成这样子了。 7.    7  接下来要把红色的字给清除了,把图层的“填充”调为0%就可以了。也许你们会误以为这样子就是最终的“水印”了。No,还差一点,这种水印太明显了,印在图片上只会让人有种“喧兵夺主”的感觉。那怎么办呢? 8.     很简单,把水印的“不透明度”调为60%就恰到好处了。这才是“终极水印”模板。 9.     我们把水印模板“自定义为图案”,随时可以为自己调用。点“编辑”->“定义图案”。在弹出的对话框中,随便填个“名称”,点“确定”,主要工作到这里基本结束了。剩下的就是如何调用的问题了。 10. 用photoshop 随便打开一张图片,点击“编辑”->“填充”,在弹出的填充对话框中点击自定图案的“下三角箭头”,在弹出的图案框中,拖动窗口的滚动条到最下面就可以看到自己制作的图案了,选定它,然后点“确定”。 11.  这就是我自制作的生日蛋糕——水印图!觉得水印还是太明显了点,你制作的时候可以把“不透明度”再调低点。 12. 如果你嫌整张图片布满水印不好看,可以把做成的“水印模板”定义为“画笔预设”,以后想在图片的哪个地方添加水印,只要选择画笔,在那个地方一点就可以了。我们来试一下,点击“编辑”->"定义画笔预设"。 13. 随便输入个名称,然后点击“确定”。那这张“水印模板”就变成“画笔工具”的一个“预设”,当我们选择“画笔工具”的时候,就可以调用了。 14. 我们选用“画笔工具”。 15. 选择“画笔预设”,选中刚才制作的“水印模板”。 16. 然后在图片上一点就是一个水印,再点一下,又一个水印,可以非常灵活。由于“画笔工具”一般是以“前景色”为画笔颜色的。所以,“前景色”的设置不同,也会导致水印的颜色不同。 17. 前景色可以配合着photoshop自带的“色板”使用,只要在“色板”上一点中,前景色就会换成相应的颜色。  
其他 1 0 2732天前
admin
12487
名称:进程监控小工具(RestartOnCrash) 1.6.3 大小:2.9 MB 语言:中文 授权:免费软件 更新:2021-03-29 官网:https://w-shadow.com/blog/2009/03/04/restart-on-crash/ 平台:Windows介绍:  RestartOnCrash一个监控进程的小工具,可用于监控iis/apache/mysql等程序      此程序相当于一个服务器小保姆一样,而且功能还是比较全的程序      全网独家汉化版,是真正汉化版PS:距离上次汉化这个软件还是13年,最近突然想起,去官网看了下,发现已经更新到了1.6.3,因此抽了点时间同步更新了最新的版本, 现在的压缩包为双版本,也即是旧版1.3.1和新版1.6.3两个版本,各位喜欢使用哪个版本就下哪个Question: 为什么1.6.3的英语原版中会出现一下卡顿,而中文汉化版没有,1.3也没有出现这种卡顿? Answer: 我们一个一个问题来回答: 1.由于1.6加入了检查更新且默认开启了启动时自动检查更新,而作者的服务器在国外,因此在启动时就会因为检查更新而出现一个卡顿, 解决方法是在设置中,将 检查更新关闭即可(Settings - > Check for updates on startup) 2.为什么中文汉化版没有这种情况,因为汉化版中,我们已经将官方默认的更新地址替换成了我们自己国内的稳定服务器,因此就不会出 现卡顿的情况 3.为什么1.3没有这种卡顿,因为,1.3里还不支持在线检查更新呀运行截图:下载地址:进程监控小工具(RestartOnCrash)1.3.1.101 单文件    进程监控小工具(RestartOnCrash)1.6.3 单文件
工具 2 0 2738天前
admin
7275
一般我们都知道宏可以在Office信任中心里修改,但有时候修改了以后重启却发现还是一样,那么这种情况该怎么处理呢 既然从EXCEL软件的界面上无法进行操作,那么只好从注册表入手了,按窗口键+R,调出运行,输入 regedit,然后 确定. 在打开的注册表编辑器中,点击 HKEY_CURRENT_USER,然后打 SOFTWARE在Software键下,打开 Microsoft项,点击前面的 +符号在打开的 Microsoft项中,找到 Office,然后打开2007对应的12.0,然后打开下面的Excel项在打开的Excel项中,可以看到Security,这个关于安全的项,在右边的窗口中,有VBAWarnings,这一项就宏安全的值了.经对比,发现VBAWarnings的值,4 为禁用所有宏,并且不通知 2 为禁用所有宏,并发出通知3 为禁用无数字签署的所有宏 1 为启用所有宏
其他 1 0 2741天前
admin
14255
      很多人买了Mac都喜欢安装双系统,平时用着没问题还好,可是一出问题就很麻烦了,这不最近我们就遇到一台Mac是较新的机器,安装了Mac+Windows双系统,某天因为一些误操作导致Windows蓝屏,安全模式无法启动,使用维护工具发现无法启动(后查明是不支持非UEFI的引导),手头又没有其他的U盘试,该怎么办呢? 后来突然灵机一动,想到既然Windows安装了Mac的驱动可以支持读取Mac的分区,那么是否Mac也可以通过这个方式来实现呢?,赶紧查资料后发现还真可行 这里可以看到,有通过命令方式的,也有通过软件的 命令行太麻烦,也没那么多时间,果断上软件,安装好,重启,可以读取Windows所在的分区了,接下来就是根据蓝屏的代码,该删驱动的删驱动,该删注册表的删注册表(删注册表需要另外安装对应软件),完成后,重新启动,选择Windows进入,蓝屏消失,正常进入桌面,问题解决 这篇文章只是提供一个思路,文章中所涉及的软件,请自行百度即可。
Mac维护 1 2 2742天前
admin
6227
    让先来回顾过去,早期的3d(或伪3d)游戏都挺小的,无论是诸如《德军总部3D》的早期PC游戏,还是nes、N64、各类街机、md、ps1、早期java手机、塞班手机、mtk手机……它们的容量很少,小到mb甚至kb计算。    但是!这些游戏实在太粗糙了,难道就没有画质比较好一点的???    有,也许目前已知的就这么一个。    这游戏叫《kkrieger》,只有96kb,光影效果非常不错!    那么,是否意味着一个低容量的大型3D游戏是可行的呢,答案是不行的,    原因有以下:    1.游戏过场视频:一般来说,视频占的容量相对很大,所以,不要用视频了。用即时演算代替!     2.游戏背景音乐:如果背景音乐是纯音乐的话,那么用mp3或ogg等格式就是浪费!这其中有多少重复的音?联想起midi格式的和弦乐。再联想起64kb程序动画的那一直重复的背景音,用这种方式缩小体积理论上没问题。     3.游戏贴图:目前3d模型用的贴图还是位图,能不能改用矢量图呢?用复杂的算法做出贴图。估计又能省一些容量。    4.游戏人物语音:     目前的游戏人物语音大多都是请人配音的,能否改用计算机演算呢?联想起以前xp系统自带的microsoft SAM语音系统。再看看现在安卓手机的原生或第三方TTS,也许又能减少大量体积,不过现有的技术不够完善,我想,也许还要加上语气、声调、音色等各种变化。     综合以上的看,实际上是不可行的,那么为什么kkrieger可以实现呢?这里引用知乎上的回答:“kkrieger makes extensive use of procedural generation methods. Textures are stored via their creation history instead of a per-pixel basis, thus only requiring the history data and the generator code to be compiled into the executable, producing a relatively small file size. Meshes are created from basic solids such as boxes and cylinders, which are then deformed to achieve the desired shape - essentially a special way of box modeling. These two generation processes account for the extensive loading time of the game — all assets of the gameplay are reproduced during the loading phase.”--WikipediaIn computing, procedural generation is a method of creating data algorithmically as opposed to manually. In computer graphics it is commonly used for creating textures. In video games it is used for creating items, quests, and level geometry. Advantages of procedural generation include smaller file sizes, larger amounts of content, and randomness for less predictable gameplay.通过储存生成器和创造步骤来使复杂的纹理变成了非常省地省空间的执行代码。而大部分形状则都是通过圆筒和立方体的扭曲变形,毕竟保存一个建模还是省空间。而运行之后,游戏本身便会开始执行生成步骤,将所有的纹理建模在内存中生成出来。所以为什么打开游戏之后会有漫长的读取时间,以及不科学的内存占用量。简单来讲,就是并非通过保存成品,而是通过保存生成器和生成步骤,让程序在启动之后按照步骤重新将成品生成出来。当然啦,这种压缩方式有相当大的局限性。首先他实际上并不是“压缩”,他实际上是属于再创造了...有一点像你自己买了个需要自己组装的书桌...不对,这个其实连书桌的木板都没给你,实际上就给了你一个如何砍树做板材拼装的手册……而一般的压缩,则是把书桌研究一下,然后拆成一块一块的,最后配一本组装说明书发送给你。过程生成的缺陷就显而易见了,他的内容从一开始就要决定是要通过特定的编辑器来创造并记录过程。所以如果采用的是导入的素材(比如说现实世界中的树啊布啊的纹理,人脸动物皮肤什么的),那么很明显是无法进行“压缩”。而普通压缩方式则不一样,因为他实际上是从已存在的文件入手,用词典(说明书)的方式来对重复,空白部分进行索引以达到节省空间的方式。通过上面的文字,我们不难看出,由于kkrieger实际上只是一个保存生成器和生成步骤的文件,因此才可以实现这么小的容量,所以如果还在对这个问题抱有想法的,可以暂时放弃了。。。最后放上那个kkrieger给大家,看画面至少在05年还是不错的,Win7下可直接运行,Win10下运行需要设置兼容性为Win7与以管理员身份运行文件下载:点击此下载kkrieger文中部分内容引用自:https://www.zhihu.com/question/38247446
休闲 2 0 2742天前
admin
5423
原文地址:点击访问差评君今天在去公司的路上接到了一个健身房的推销电话,我假装表现出很感兴趣的样子聊了一会儿,以家离太远为理由拒绝了。本来我觉得没多大事儿,推销电话差友们肯定也经常接到。不过后来一拍脑袋想了想不太对,我昨天刚刚在手机上查过健身房,啥也没留下,这第二天能有人直接打我的电话号码推销健身房会员?要不是虽然我每年都心血来潮想健身,但最终只是装模做样地搜索一下就放弃的话,那这就是一次精准的营销啊!差评君对这个现象背后的手段很好奇,找到了老朋友振宇兄(公众号:一本黑,ID:darkinsider)一起探究了一下原理,结果又双叒叕冒出来个黑产。振宇问了黑客老师傅有什么看法,老师傅表示一般就是企业或机构为了做 “ 精准营销 ” 非法抓取了用户的手机号,上 QQ 一搜就搜到了不少提供这种服务的群。振宇兄假装要买服务,和群主套上了话,让对方把价格,服务细节发来。用那边的话来说,他们可以抓到网站访客的信息,其中包括了 QQ,手机号码,所在地和兴趣等等,相当齐全。对方介绍服务的 Word 文件至于这个黑色产业有多成熟,看看下面这个图。。。群主说,他们会给购买产品的客户提供一个独立的后台,在后台里可以很清楚的看到所有抓取来的信息。差评君管这叫 “ 技术变现 ”怎么抓取呢?在指定网页或者 APP 里嵌一段代码。为了了解他们具体是怎么做的,黑客老师傅祭出了 “ 奥义·计算机基础知识 ”。老师傅分析了一下对方嵌入过代码的某网站,果然发现了网站主页有些问题,然后还原了网址,找到了这个黑产平台的访客统计系统。但是光发现系统没用啊,不进去哪能看到什么重要的东西,于是老师傅下定了决心祭出了 “ 进阶奥义·计算机中等知识 ”,通过一个常见的漏洞拿到了一个 “ 旗舰版 ” 用户账号。用户的手机号,IP 搜索词和上网方式都暴露在后台里了(这一看就是留学中介的目标用户)老师傅说,这种情况一般都是多渠道合作的结果,比如这些黑产商和手机浏览器合作,浏览器浏览指定网页的时候就会抓取手机号上报,不过一般这么做的都是野鸡浏览器,主流的大厂浏览器是不屑于去做的。还有野鸡浏览器???差评君抢来了一个小伙伴的国产手机,打开应用市场,随便一搜,果然特么有的是人去做。。。懒得请人设计图标,你也别整一模一样的啊,太不用心了吧喂不光浏览器,和运营商合作也可以抓取手机号。后来老师傅发来了一段网页获取用户手机号的代码例子。代码中的 “ x-up-calling-line-id ” 字段后面就是手机号码上面的代码是通过抓取 HTTP 请求里的信息来发现手机号的,不过现在随着系统升级和政策改变等原因,请求里不会含有手机号,没那么简单了。。。但是魔高一丈,黑产商会通过扫描运营商漏洞来获取数据端口。或者更可怕的情况是,有内鬼为了赚点私房钱给他们开放了后端接口,想想看我们看到的黑产这么发达,这种暗地勾结的情况可能才是比较普遍的,因为涉及了更多人的利益才会保护得这么好。说实话,运营商的利益点也不少,比如说下图这种劫持广告很多网站或者 APP 运营商会给黑产商提供服务,让他们嵌入恶意代码来偷用户的信息,而这些信息购买者不一定是最后一级消费者,用户信息可能会被贩卖好几次,好几层的供求关系算下来,妥妥儿的一个黑色产业链!用户信息被获取后,他们会处理数据并且分析用户,然后电话推销或者回访,做到精确营销。更可怕的是,有的人搞搞营销也就算了,毕竟还是做生意,但是指不定倒卖几手之后你的信息会跑到骗子手里。有的骗子通过搭建伪基站,冒用别的号码发诈骗短信(例如伪造银行信息)。伪基站的范围有限制,有的骗子搭在车上移动作案,这排场是不是有点像 《 窃听风云 》有的钓鱼网站里还会藏木马,这种木马会拦截银行发给你的短信,转发到骗子手上,这样一来,别人可以收到你的验证码登你的网银,替你把本来要上交给马爸爸的钱保管起来。。。老师傅说着,就拿出了手机绑了张银行卡,接着装了个木马,然后演示了一遍转账。果然转账记录什么的都收不到了,转到了老师傅的另一台设备里。也许有的人说我上网习惯好,不会上钓鱼网站的,但是有的野鸡手机维修店在干活儿的时候不太老实,会私自拷一份手机里的信息(比如通讯录,照片,账号),然后还会发展愿意购买信息的黑商,是不是防不胜防???有的人可能会多长个心眼,送修之前恢复出厂设置,但是碰到技术深厚的老司机,仍然有办法还原信息。我想这位老师身体力行地教育过大家了,不要小瞧搞技术的人。。。差评君还记得以前接到过很多失败的推销电话,因为我根本没这个需求,如今这些人也知道通过技术节约成本了,可惜选择了违法的方式,和倒卖盗取信息的黑产商合作。现在这个互联网时代,人在网络上存的信息越来越多了,暴露以后的后果也会越来越严重。现在,差评君和振宇兄一起通过这篇文章告诉你,你的信息值不少钱,这些钱能够扶起一条产业链,既然利益方一多,那么他们就有能力去提高技术手段,可以说防不胜防了。。。对于这种现象,差评君只想说平时上网一定要注意一些,小心钓鱼。对于黑产商,我也知道你们可能上有老下有小需要钱来打点生活,但是挣到这门钱的技术你用了手不觉得脏吗?这钱花着心不觉得愧吗?“知道现在推销这么精准,哪天收到什么增加持久力的推销广告,怕是心里得有点数了。。。
休闲 2 0 2745天前

IP地址位置数据由纯真CZ88提供支持

桂公网安备 45010302000666号 桂ICP备14001770-3号
感谢景安网络提供数据空间
本站CDN由七牛云提供支持
网站已接入ipv6
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
如果某些内容侵犯了您的权益,请通过右侧按钮与我们联系
Your IP: 10.3.31.114 , 2025-06-28 01:56:33 , Processed in 5.5147 second(s).
Powered by HadSky 8.5.2
知道创宇云安全