有没有什么函数能监听网络端口啊?

来源:百度知道 编辑:UC知道 时间:2024/06/05 21:47:11
我想监听smtp端口的数据,但又不想影响foxmail等邮件程序的收发,有没有函数可以用啊?
我试了新的程序,发现无法监听所有数据,包括smtp和pop3协议(res的值总是0),于是我将新程序里的packet_handler函数复制到原来您给我的那个程序
这下packet_handler函数有被调用了,但是总是不能显示数据
看了一下您的代码里有这句话s = (u_char *)tcph + sizeof(tcp_header)//这里tcph还没有赋值,而直接使用,是不是有问题啊?
我试着将tcph改成ih,但结果收到的数据都是一连串蜂鸣'\07'和'<',请问应该要怎么改好?
-------------------------------------------------------------------------------------
成功了,将ih加上IP头再加上TCP头就行了。谢谢您了!
但是有点小问题,接收到的文本是这样的
 用户名
密码

而不是

USER <你的用户名> //应该显示user的地方是我显示的是乱码
PASS <你的口令字> //应该显示pass的地方是我显示的是空格

请问您知道这是怎么回事吗?(我想利用程序自动提取密码,所以需要比较明确的分隔符,但是显示的是乱码我就不知道怎么提取好了)

/***************************
实在对不起。因为我现在没有调试运行环境(没装任何电子邮件程序),只是在后备的源码上删改的,没有运行确认。检查发现确实漏了这样一句:
tcph = (tcp_header *) ((u_char*)ih + (ih->ver_ihl & 15)*4);
还挺复杂,如果不清楚ip头的数据结构这一句还真对付不出来。加在ih=...后面即可。

另外, buf[i]=0; 之前加上 buf[i++]='\n'; 可能使输出更好读。或者像下面这样改,就不用 flog 和 isFirst了。原来的struct tm *ltime; 也不需要。

如果还不行,看来我就得装一个Foxmail实际调试了。

删改的结果可能还有错误或有的东西没有用到而没有删去。我注明了是参考 group__wpcap__tut6.html
但详细网址已经记不得了,从别的文档检查,可能是 http://winpcap.polito.it/docs/, 讲解的非常详细。
**************************/
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
u_char buf[80], *s, *d;
int i;
ip_header *ih = (ip_header *) (pkt_data + 14);
tcp_header *tcph = (tcp_header *) ((u_char*)ih + (ih->ver_ihl & 15)*4);
for ( i = 0, s = (u_char *)tcph + sizeof(tcp_header),
d = (u