當前位置:首頁 » 操作系統 » 收集信息源碼

收集信息源碼

發布時間: 2023-06-29 06:03:22

❶ http協議解析 請求行的信息怎麼提取 c語言源碼

實現步驟:
1)用Wireshark軟體抓包得到test.pcap文件
2)程序:分析pcap文件頭 -> 分析pcap_pkt頭 -> 分析幀頭 -> 分析ip頭 -> 分析tcp頭 -> 分析http信息
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<time.h>
#define BUFSIZE 10240
#define STRSIZE 1024
typedef long bpf_int32;
typedef unsigned long bpf_u_int32;
typedef unsigned short u_short;
typedef unsigned long u_int32;
typedef unsigned short u_int16;
typedef unsigned char u_int8;
//pacp文件頭結構體
struct pcap_file_header
{
bpf_u_int32 magic; /* 0xa1b2c3d4 */
u_short version_major; /* magjor Version 2 */
u_short version_minor; /* magjor Version 4 */
bpf_int32 thiszone; /* gmt to local correction */
bpf_u_int32 sigfigs; /* accuracy of timestamps */
bpf_u_int32 snaplen; /* max length saved portion of each pkt */
bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */
};
//時間戳
struct time_val
{
long tv_sec; /* seconds 含義同 time_t 對象的值 */
long tv_usec; /* and microseconds */
};
//pcap數據包頭結構體
struct pcap_pkthdr
{
struct time_val ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
//數據幀頭
typedef struct FramHeader_t
{ //Pcap捕獲的數據幀頭
u_int8 DstMAC[6]; //目的MAC地址
u_int8 SrcMAC[6]; //源MAC地址
u_short FrameType; //幀類型
} FramHeader_t;
//IP數據報頭
typedef struct IPHeader_t
{ //IP數據報頭
u_int8 Ver_HLen; //版本+報頭長度
u_int8 TOS; //服務類型
u_int16 TotalLen; //總長度
u_int16 ID; //標識
u_int16 Flag_Segment; //標志+片偏移
u_int8 TTL; //生存周期
u_int8 Protocol; //協議類型
u_int16 Checksum; //頭部校驗和
u_int32 SrcIP; //源IP地址
u_int32 DstIP; //目的IP地址
} IPHeader_t;
//TCP數據報頭
typedef struct TCPHeader_t
{ //TCP數據報頭
u_int16 SrcPort; //源埠
u_int16 DstPort; //目的埠
u_int32 SeqNO; //序號
u_int32 AckNO; //確認號
u_int8 HeaderLen; //數據報頭的長度(4 bit) + 保留(4 bit)
u_int8 Flags; //標識TCP不同的控制消息
u_int16 Window; //窗口大小
u_int16 Checksum; //校驗和
u_int16 UrgentPointer; //緊急指針
}TCPHeader_t;
//
void match_http(FILE *fp, char *head_str, char *tail_str, char *buf, int total_len); //查找 http 信息函數
//
int main()
{
struct pcap_file_header *file_header;
struct pcap_pkthdr *ptk_header;
IPHeader_t *ip_header;
TCPHeader_t *tcp_header;
FILE *fp, *output;
int pkt_offset, i=0;
int ip_len, http_len, ip_proto;
int src_port, dst_port, tcp_flags;
char buf[BUFSIZE], my_time[STRSIZE];
char src_ip[STRSIZE], dst_ip[STRSIZE];
char host[STRSIZE], uri[BUFSIZE];
//初始化
file_header = (struct pcap_file_header *)malloc(sizeof(struct pcap_file_header));
ptk_header = (struct pcap_pkthdr *)malloc(sizeof(struct pcap_pkthdr));
ip_header = (IPHeader_t *)malloc(sizeof(IPHeader_t));
tcp_header = (TCPHeader_t *)malloc(sizeof(TCPHeader_t));
memset(buf, 0, sizeof(buf));
//
if((fp = fopen(「test.pcap」,」r」)) == NULL)
{
printf(「error: can not open pcap file\n」);
exit(0);
}
if((output = fopen(「output.txt」,」w+」)) == NULL)
{
printf(「error: can not open output file\n」);
exit(0);
}
//開始讀數據包
pkt_offset = 24; //pcap文件頭結構 24個位元組
while(fseek(fp, pkt_offset, SEEK_SET) == 0) //遍歷數據包
{
i++;
//pcap_pkt_header 16 byte
if(fread(ptk_header, 16, 1, fp) != 1) //讀pcap數據包頭結構
{
printf(「\nread end of pcap file\n」);
break;
}
pkt_offset += 16 + ptk_header->caplen; //下一個數據包的偏移值
strftime(my_time, sizeof(my_time), 「%Y-%m-%d %T」, localtime(&(ptk_header->ts.tv_sec))); //獲取時間
// printf(「%d: %s\n」, i, my_time);
//數據幀頭 14位元組
fseek(fp, 14, SEEK_CUR); //忽略數據幀頭
//IP數據報頭 20位元組
if(fread(ip_header, sizeof(IPHeader_t), 1, fp) != 1)
{
printf(「%d: can not read ip_header\n」, i);
break;
}
inet_ntop(AF_INET, (void *)&(ip_header->SrcIP), src_ip, 16);
inet_ntop(AF_INET, (void *)&(ip_header->DstIP), dst_ip, 16);
ip_proto = ip_header->Protocol;
ip_len = ip_header->TotalLen; //IP數據報總長度
// printf(「%d: src=%s\n」, i, src_ip);
if(ip_proto != 0×06) //判斷是否是 TCP 協議
{
continue;
}
//TCP頭 20位元組
if(fread(tcp_header, sizeof(TCPHeader_t), 1, fp) != 1)
{
printf(「%d: can not read ip_header\n」, i);
break;
}
src_port = ntohs(tcp_header->SrcPort);
dst_port = ntohs(tcp_header->DstPort);
tcp_flags = tcp_header->Flags;
// printf(「%d: src=%x\n」, i, tcp_flags);
if(tcp_flags == 0×18) // (PSH, ACK) 3路握手成功後
{
if(dst_port == 80) // HTTP GET請求
{
http_len = ip_len – 40; //http 報文長度
match_http(fp, 「Host: 「, 「\r\n」, host, http_len); //查找 host 值
match_http(fp, 「GET 「, 「HTTP」, uri, http_len); //查找 uri 值
sprintf(buf, 「%d: %s src=%s:%d dst=%s:%d %s%s\r\n」, i, my_time, src_ip, src_port, dst_ip, dst_port, host, uri);
//printf(「%s」, buf);
if(fwrite(buf, strlen(buf), 1, output) != 1)
{
printf(「output file can not write」);
break;
}
}
}
} // end while
fclose(fp);
fclose(output);
return 0;
}
//查找 HTTP 信息
void match_http(FILE *fp, char *head_str, char *tail_str, char *buf, int total_len)
{
int i;
int http_offset;
int head_len, tail_len, val_len;
char head_tmp[STRSIZE], tail_tmp[STRSIZE];
//初始化
memset(head_tmp, 0, sizeof(head_tmp));
memset(tail_tmp, 0, sizeof(tail_tmp));
head_len = strlen(head_str);
tail_len = strlen(tail_str);
//查找 head_str
http_offset = ftell(fp); //記錄下HTTP報文初始文件偏移
while((head_tmp[0] = fgetc(fp)) != EOF) //逐個位元組遍歷
{
if((ftell(fp) – http_offset) > total_len) //遍歷完成
{
sprintf(buf, 「can not find %s \r\n」, head_str);
exit(0);
}
if(head_tmp[0] == *head_str) //匹配到第一個字元
{
for(i=1; i<head_len; i++) //匹配 head_str 的其他字元
{
head_tmp[i]=fgetc(fp);
if(head_tmp[i] != *(head_str+i))
break;
}
if(i == head_len) //匹配 head_str 成功,停止遍歷
break;
}
}
// printf(「head_tmp=%s \n」, head_tmp);
//查找 tail_str
val_len = 0;
while((tail_tmp[0] = fgetc(fp)) != EOF) //遍歷
{
if((ftell(fp) – http_offset) > total_len) //遍歷完成
{
sprintf(buf, 「can not find %s \r\n」, tail_str);
exit(0);
}
buf[val_len++] = tail_tmp[0]; //用buf 存儲 value 直到查找到 tail_str
if(tail_tmp[0] == *tail_str) //匹配到第一個字元
{
for(i=1; i<tail_len; i++) //匹配 head_str 的其他字元
{
tail_tmp[i]=fgetc(fp);
if(tail_tmp[i] != *(tail_str+i))
break;
}
if(i == tail_len) //匹配 head_str 成功,停止遍歷
{
buf[val_len-1] = 0; //清除多餘的一個字元
break;
}
}
}
// printf(「val=%s\n」, buf);
fseek(fp, http_offset, SEEK_SET); //將文件指針 回到初始偏移
}

❷ net-snmp是如何收集信息的

在windows下編譯net-snmp其實很簡單,我用的是net-snmp5.2.1.2的版本。只需把源碼下的win32目錄中的幾個庫的工程編譯就行了。但記住,把netsnmp.lib放在最後編譯,要不然編譯結果不一樣,切記,切記。然後再用編譯出來的四個庫文件: netsnmp.lib,netsnmpagent.lib,netsnmphelpers.lib,netsnmpmibs.lib,來編譯netsnmp.dll。注意還要加上wsock32.lib。如果編譯出錯,提示跟VC默認的庫有沖突,按提示在編譯環境中用NODEFAULTLIB:XXX來去掉VC的預設庫文件。

下面介紹一下幾個例子程序,例子源代碼都可以通過net-snmp的幫助超鏈接連到其網站下載

1.編譯例子example-demon;

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>

#include "nstAgentSubagentObject.h"

static int keep_running;

RETSIGTYPE
stop_server(int a) {
keep_running = 0;
}

int
main(int argc, char *argv[])

{
int agentx_subagent=0; /* change this if you want to be a SNMP master agent */
/*為了編譯成為主代理,這里設為0*/
int background = 0; /* change this if you want to run in the background */
int syslog = 0; /* change this if you want to use syslog */

/* print log errors to syslog or stderr */
if (syslog)
snmp_enable_calllog();
else
snmp_enable_stderrlog();

/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
}

/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);

/* initialize tcpip, if necessary */
SOCK_STARTUP;

/* initialize the agent library */
init_agent("example-demon");

/* initialize mib code here */

/* mib code: init_nstAgentSubagentObject from nstAgentSubagentObject.C */
init_nstAgentSubagentObject();

/* initialize vacm/usm access control */
if (!agentx_subagent) {
void init_vacm_vars();/*---------------小修改一下---------------*/
void init_usmUser();
}

/* example-demon will be used to read example-demon.conf files. */
/*這里會讀取一個為example-demon.conf 的配置文件--關鍵*/
init_snmp("example-demon");

/* If we're going to be a snmp master agent, initial the ports */
if (!agentx_subagent)
init_master_agent(); /* open the port to listen on (defaults to udp:161) */

/* In case we recevie a request to stop (kill -TERM or kill -INT) */
keep_running = 1;
signal(SIGTERM, stop_server);
signal(SIGINT, stop_server);

snmp_log(LOG_INFO,"example-demon is up and running.\n");

/* your main loop here... */
while(keep_running) {
/* if you use select(), see snmp_select_info() in snmp_api(3) */
/* --- OR --- */
agent_check_and_process(1); /* 0 == don't block */
}

/* at shutdown time */
snmp_shutdown("example-demon");
SOCK_CLEANUP;

return 0;
}

這里都有很詳細的注釋,就不說明了。
在vc的工程中,把所用到的例子mib庫文件nstAgentSubagentObject.h,nstAgentSubagentObject.c添加進去。並設置好所需的四個庫文件,如文開頭所述,看是否需要加wsock32.lib,和NODEFAULTLIB。接著就應該可以編譯通過了,無錯誤無警告。

2.關於運行
運行就必須設置配置文件的路徑,最好下一個NET-SNMP的二進制包,按預設路徑安裝C:\USR。安裝時提示還需要下載一個PERL的安裝包,用來運行mib2c工具,這個網上都有介紹。配置文件放在
c:\,c:\usr\etc\snmp或C:\usr\share\snmp都有效。但如果你是運行例子主代理程序,會在etc目錄下找配置文件。例子的配置文件應和init_snmp("example-demon");中初始化的名字相同:example-demon.conf。配置文件只需設兩個值就夠了:

#community 的讀寫根據需要設,這里設的是readonly
rocommunity public
agentaddress 161

另外,如果是運行二進制包,snmp.conf文件不要手工修改,要通過snmpconf生成,手工修改的好像不起作用。例子程序的配置可以手工設置。
最後,把example-demon.conf放到c:\usr\etc\snmp下。關掉二進制包的snmpd.exe服務(如果在運行的話)。然後運行example-demon.exe。正常情況下,如果安裝了二進制包,例子可以在編譯目錄下運行,不行就把netsnmp.dll拷進來,或直接把例子放到二進制包的bin目錄下。有問題檢查配置文件的路徑和設置。最好下載一個叫getif的管理端軟體,很方便小巧的查詢工具,來側試。

3.編譯自己的mib庫
第一種可以通過mib2c生成模版框架,在相關地方添上數據導入指針及其他。
第二種可以參考nstAgentSubagentObject.c。
第三種可以參考net-snmp-xxx\agent\mibgroup\examples下的幾個實現方式。

總結
主要是環境設置,庫的編譯順序,配置文件設置。參考例子基本沒多大問題。

❸ 微信獲取用戶信息 php源代碼

復制代碼 代碼如下: * 通過http協議提交數據到服務端,實現表單提交功能,包括上傳文件 * @param actionUrl 上傳路徑 * @param params 請求參數 key為參數名,value為參數值 ... int i=0; while(pit.hasNext()){ parts[i++] = pit.next(); } //如果出現亂碼可以嘗試一下方式 //...

❹ 高分!求高手 網站信息採集源代碼或編程思路

思路:
RSS採集
相似演算法
聚類
分類
(一)原理
小偷程序實際上是通過了XML中的XMLHTTP組件調用其它網站上的網頁。比如新聞小偷程序,很多都是調用了sina的新聞網頁,並且對其中的html進行了一些替換,同時對廣告也進行了過濾。用小偷程序的優點有:無須維護網站,因為小偷程序中的數據來自其他網站,它將隨著該網站的更新而更新;可以節省伺服器資源,一般小偷程序就幾個文件,所有網頁內容都是來自其他網站。缺點有:不穩定,如果目標網站出錯,程序也會出錯,而且,如果目標網站進行升級維護,那麼小偷程序也要進行相應修改;速度,因為是遠程調用,速度和在本地伺服器上讀取數據比起來,肯定要慢一些。
(二)事例
以下是代碼片段:
下面就XMLHTTP在ASP中的應用做個簡單說明
〈%
』常用函數
』1、輸入url目標網頁地址,返回值getHTTPPage是目標網頁的html代碼
function getHTTPPage(url)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate〈〉4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
set http=nothing
if err.number〈〉0 then err.Clear
end function
』2、轉換亂瑪,直接用xmlhttp調用有中文字元的網頁得到的將是亂瑪,可以通過adodb.stream組件進行轉換
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
』下面試著調用http://www.3doing.com/earticle/的html內容
Dim Url,Html
Url="http://www.3doing.com/earticle/"
Html = getHTTPPage(Url)
Response.write Html
%〉ASP小偷入門教程.....附QQ天氣小偷源代碼
要做一名好的小偷有點難度:P,靈活運用XMLHTTP組件,你也可以做「小偷」
這里所說的「小偷」指的是在ASP中運用XML中的XMLHTTP組件提供的強大功能,把遠程網站上的數據(圖片,網頁及其他文件)抓取到本地,經過各種處理後顯示到頁面上或者存儲進資料庫的一類程序。你可以通過這種小偷程序,完成過去一些似乎完全不可能實現的任務,比如說把某個站的頁面偷梁換柱後變成自己的頁面,或者把某個站的一些數據(文章,圖片)保存到本地資料庫中加以利用。「小偷」的優點有:無須維護網站,因為小偷程序中的數據來自其他網站,它將隨著該網站的更新而更新;可以節省大量的伺服器資源,一般小偷程序就幾個文件,所有網頁內容都是來自其他網站。缺點在於:不穩定,如果目標網站出錯,程序也會出錯,而且,如果目標網站進行升級維護,那麼小偷程序也要進行相應修改;速度,因為是遠程調用,速度和在本地伺服器上讀取數據比起來,肯定要慢一些。怎麼樣,聽起來很神奇吧?我們現在就開始來學習一些「小偷」程序的入門知識吧!
我們拿個簡單點的東西來研究一下吧,QQ網站上的天氣預報程序
程序演示地址:http://www.colasky.com/weather.asp
源碼下載:http://www.colasky.com/weather.rar
代碼如下:
以下是代碼片段:
〈%
On Error Resume Next
Server.ScriptTimeOut=9999999
Function getHTTPPage(Path)
t = GetBody(Path)
getHTTPPage=BytesToBstr(t,"GB2312")
End function'首先,進行小偷程序的一些初始化設置,以上代碼的作用分別是忽略掉所有非致命性錯誤,把小偷程序的運行超時時間設置得很長(這樣不會出現運行超時的錯誤),轉換原來默認的UTF-8編碼轉換成GB2312編碼,否則直接用XMLHTTP組件調用有中文字元的網頁得到的將是亂碼。
以下是代碼片段:
Function GetBody(url)
on error resume next
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
』然後調用XMLHTTP組件創建一個對象並進行初始化設置。
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
Function Newstring(wstr,strng)
Newstring=Instr(lcase(wstr),lcase(strng))
if Newstring〈=0 then Newstring=Len(wstr)
End Function
』處理抓取回來的數據需要調用adodb.stream組件並進行初始化設置。%〉
』以下即為頁面顯示部分
〈%
Dim wstr,str,url,start,over,city
』定義一些需要使用到的變數
city = Request.QueryString("id")
』程序傳回的ID變數(即用戶選擇的城市)賦給id
url="http://appnews.qq.com/cgi-bin/news_qq_search?city="&city&""
』這里設置需要抓取的頁面地址,當然你也可以直接指定某個地址而不使用變數
wstr=getHTTPPage(url) ' 以下是代碼片段:
獲取指定頁面的全部數據
start=Newstring(wstr," ")
』這里設置需要處理的數據的頭部,這個變數應視不同情況而設置,具體內容可以通過查看需要抓取的頁面的源代碼來確定。因為在這個程序里我們需要抓取整個頁面,所以設置為頁面全部抓取。注意,設置的內容必須是頁面內容唯一的,不可以重復。
over=Newstring(wstr," ")
』和start相對應的就是需要處理的數據的尾部,同樣的,設置的內容必須是頁面中唯一的。
body=mid(wstr,start,over-start)
』設置顯示頁面的范圍
』下面就是動用乾坤挪移大法的時候了,通過replace可以用一些字元替換掉數據中指定的字元。
body = replace(body,"skin1","天氣預報")
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")
』本程序中已經完成了替換的工作,如果有其他需要的話可以繼續進行類似的替換操作。
response.write body
%〉替換完需要修改的內容後,就可以把修改的內容顯示在頁面上了。至此程序結束
程序使用方法及結果:把上述代碼去掉說明部分後保存為tianqi.asp,上傳到支持ASP和XML的空間下,在瀏覽器中運行即可。你可以在在這個程序的基礎上進行進一步的界面美化或者程序優化。
以上只是一些關於XMLHTTP組件的初級應用,實際上它還能實現的功能還有很多,比如說保存遠程圖片到本地伺服器上,配合adodb.stream組件可以把獲取來的數據保存進資料庫。小偷的作用和使用范圍都很廣。但是不可以拿來做違法的事哦!
也許還有人要問了,這種「小偷」程序難道只是ASP的專利嗎?非也,PHP通過fopen函數一樣可以實現同樣的效果,由於PHP本身的各種特點,寫出來的小偷程序和ASP相比,在體積和執行效率上都有著明顯的優勢,但限於篇幅,這里就不一一說明了。

❺ 安卓天氣預報源碼,從網路獲取獲取信息那種的,求大神教教我

你要求太多了,除非是干這行的且有相關項目。即使如此也不會輕易給你。既然你是答辯,那麼可以給你大概說下都是什麼東西。關鍵就是一個後台service,設置成24小時一次訪問網路,獲取數據,至於天氣預報信息,是從伺服器請求下來的數據。其他的就是把這些數據適配到界面的問題了。『 建議你去網路上搜下: 1,Activity組件 2,service組件 3,webService 4,Adapter 當讓,以上都是安卓相關。 既然是畢業設計,就花點時間看下吧。記得當時我也選個自己不怎麼會的項目,然後鑽了一段時間,最後畢業答辯雖然說的不好,可是都是自己的東西,老師們也知道大學情況,看到有人能自己努力不去抄襲,也很感動的給了好評。我謝謝那些令人尊敬的老師給我的鼓勵。加油吧... ...

熱點內容
風險防控平台伺服器地址是什麼 發布:2025-03-20 11:59:04 瀏覽:231
什麼為有效wifi密碼 發布:2025-03-20 11:57:22 瀏覽:704
聯發科安卓哪個好 發布:2025-03-20 11:56:26 瀏覽:356
看門狗ce腳本 發布:2025-03-20 11:53:41 瀏覽:476
linuxcrypto 發布:2025-03-20 11:44:35 瀏覽:516
win7縮略圖緩存 發布:2025-03-20 11:31:30 瀏覽:69
c2c是什麼文件夾 發布:2025-03-20 11:30:45 瀏覽:687
交管12123的登錄密碼哪裡找 發布:2025-03-20 11:25:50 瀏覽:379
編程技術大牛 發布:2025-03-20 11:21:21 瀏覽:588
315演算法 發布:2025-03-20 11:15:35 瀏覽:213