『壹』 用c語言編寫一個得到域名的IP的程序,得到的IP放入指定的變數中
我可以得出IP,但是不能把IP賦給變數,本人菜鳥一隻,學C不到兩個月,所以只能做到這了,代碼給樓主
#include<stdio.h>
#include<stdlib.h>
void main()
{
char str[50],str1[40];
printf("請輸入域名:");
gets(str1);
sprintf(str,"ping %s",str1);
system(str);
}
滿意就給分,不滿意就不用了
『貳』 用C語言編寫一個域名提取的程序,如何選擇抓包工具,域名的正則表達式怎麼寫
用libpcap這個工具,很強大。
抓包部分在中文手冊中有源代碼。我就給你講講獲取域名吧。
首先http包才有域名,並且是你三次握手後第一個包。
包到手後累加14+20+tcp->doff*4後邊的信息中有host:*****的消息
14是MAC頭 20是ip頭 後邊那個 是 tcp頭 長度(由於tcp頭長度不定,但是有標志位的。)
至於怎麼提取你自己寫吧
『叄』 C語言中 如何實現域名轉換為IP 高分
char cmd[100];
char url[]="www.BAIDU.COM";
char tmp_file_name[]="tmp.txt";
FILE *fp;
sprintf(cmd,"nslookup %s > %s",url,tmp_file_name);
system(cmd);
if ( (fp=fopen(tmp_file_name,"r"))==NULL ){
printf("can not open %s\n",tmp_file_name);
exit(0);
}
// 然後按行讀。跳過前兩行。找後面的行。
// 如果某行第一個字元串是Addresses:
// 第二個字元串就是 IP
tmp.txt:
Server: aaaaaaaaaa
Address: nnn.nnn.nnn.nnn
Non-authoritative answer:
Name: www.a.shifen.COM
Addresses: 119.75.213.61, 119.75.216.30
Aliases: www.BAIDU.COM
『肆』 只用C語言,怎麼通過域名得到IP地址
查找的方法(07版為例): 1、在左下方開始鍵,點擊之後出現搜索框 2、在搜索框內輸入指令cmd運行 3、進入窗口,按照要求輸入指令:nbtstat -a IP,ip地址為你所查詢主機的ip地址。 4、這樣就可以根據ip泛解析出域名。
『伍』 C語言如何獲取一個域名的IP地址
調用DNS解析
『陸』 求C語言下的TCP/IP協議的工作流程圖
這個問題太專業了
給你點TCP/IP協議相關的介紹吧,希望可以對你有用,雖然你可能已經知道了。
TCP/IP協議介紹
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、乙太網以及RS-232串列介面)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。這4層分別為:
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網路遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網路介面層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送數據。
TCP/IP中的協議
以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:
1. IP
網際協議IP是TCP/IP的心臟,也是網路層中最重要的協議。
IP層接收由更低層(網路介面層例如乙太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好像是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
2. TCP
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名資料庫),但使用UDP傳送有關單個主機的信息。
3.UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
4.ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的『Redirect』信息通知主機通向其他系統的更准確的路徑,而『Unreachable』信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接『體面地』終止。PING是最常用的基於ICMP的服務。
5. TCP和UDP的埠結構
TCP和UDP服務通常有一個客戶/伺服器的關系,例如,一個Telnet服務進程開始在系統上處於空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息並發出響應,客戶程序讀出響應並向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認並協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址 發送包的IP地址。
目的IP地址 接收包的IP地址。
源埠 源系統上的連接的埠。
目的埠 目的系統上的連接的埠。
埠是一個軟體結構,被客戶程序或服務進程用來發送和接收信息。一個埠對應一個16比特的數。服務進程通常使用一個固定的埠,例如,SMTP使用25、Xwindows使用6000。這些埠號是『廣為人知』的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
相信大家都聽說過TCP/IP這個詞,這個詞好像無處不在,時時都會在你面前跳出來。那TCP/IP到底是什麼意思呢?
TCP/IP其實是兩個網路基礎協議:IP協議、TCP協議名稱的組合。下面我們分別來看看這兩個無處不在的協議。
IP協議
IP(Internet Protocol)協議的英文名直譯就是:網際網路協議。從這個名稱我們就可以知道IP協議的重要性。在現實生活中,我們進行貨物運輸時都是把貨物包裝成一個個的紙箱或者是集裝箱之後才進行運輸,在網路世界中各種信息也是通過類似的方式進行傳輸的。IP協議規定了數據傳輸時的基本單元和格式。如果比作貨物運輸,IP協議規定了貨物打包時的包裝箱尺寸和包裝的程序。 除了這些以外,IP協議還定義了數據包的遞交辦法和路由選擇。同樣用貨物運輸做比喻,IP協議規定了貨物的運輸方法和運輸路線。
TCP協議
我們已經知道了IP協議很重要,IP協議已經規定了數據傳輸的主要內容,那TCP(Transmission Control Protocol)協議是做什麼的呢?不知大家發現沒有,在IP協議中定義的傳輸是單向的,也就是說發出去的貨物對方有沒有收到我們是不知道的。就好像8毛錢一份的平信一樣。那對於重要的信件我們要寄掛號信怎麼辦呢?TCP協議就是幫我們寄「掛號信」的。TCP協議提供了可靠的面向對象的數據流傳輸服務的規則和約定。簡單的說在TCP模式中,對方發一個數據包給你,你要發一個確認數據包給對方。通過這種確認來提供可靠性。
TCP/IP(Transmission Control Protocol/Internet Protocol的簡寫,中文譯名為傳輸控制協議/互聯網路協議)協議是Internet最基本的協議,簡單地說,就是由底層的IP協議和TCP協議組成的。TCP/IP協議的開發工作始於70年代,是用於互聯網的第一套協議。
1.1 TCP/IP參考模型
TCP/IP協議的開發研製人員將Internet分為五個層次,以便於理解,它也稱為互聯網分層模型或互聯網分層參考模型,如下表:
應用層(第五層)
傳輸層(第四層)
互聯網層(第三層)
網路介面層(第二層)
物理層(第一層)
物理層:對應於網路的基本硬體,這也是Internet物理構成,即我們可以看得見的硬設備,如PC機、互連網伺服器、網路設備等,必須對這些硬設備的電氣特性作一個規范,使這些設備都能夠互相連接並兼容使用。
網路介面層:它定義了將資料組成正確幀的規程和在網路中傳輸幀的規程,幀是指一串資料,它是資料在網路中傳輸的單位。
互聯網層:本層定義了互聯網中傳輸的「信息包」格式,以及從一個用戶通過一個或多個路由器到最終目標的"信息包"轉發機制。
傳輸層:為兩個用戶進程之間建立、管理和拆除可靠而又有效的端到端連接。
應用層:它定義了應用程序使用互聯網的規程。
1. 2 網間協議IP
Internet 上使用的一個關鍵的底層協議是網際協議,通常稱IP協議。我們利用一個共同遵守的通信協議,從而使 Internet 成為一個允許連接不同類型的計算機和不同操作系統的網路。要使兩台計算機彼此之間進行通信,必須使兩台計算機使用同一種"語言"。通信協議正像兩台計算機交換信息所使用的共同語言,它規定了通信雙方在通信中所應共同遵守的約定。
計算機的通信協議精確地定義了計算機在彼此通信過程的所有細節。例如,每台計算機發送的信息格式和含義,在什麼情況下應發送規定的特殊信息,以及接收方的計算機應做出哪些應答等等。
網際協議IP協議提供了能適應各種各樣網路硬體的靈活性,對底層網路硬體幾乎沒有任何要求,任何一個網路只要可以從一個地點向另一個地點傳送二進制數據,就可以使用IP協議加入 Internet 了。
如果希望能在 Internet 上進行交流和通信,則每台連上 Internet 的計算機都必須遵守IP協議。為此使用 Internet 的每台計算機都必須運行IP軟體,以便時刻准備發送或接收信息。
IP協議對於網路通信有著重要的意義:網路中的計算機通過安裝IP軟體,使許許多多的區域網絡構成了一個龐大而又嚴密的通信系統。從而使 Internet 看起來好像是真實存在的,但實際上它是一種並不存在的虛擬網路,只不過是利用IP協議把全世界上所有願意接入 Internet 的計算機區域網絡連接起來,使得它們彼此之間都能夠通信。
1.3 傳輸控制協議TCP
盡管計算機通過安裝IP軟體,從而保證了計算機之間可以發送和接收資料,但IP協議還不能解決資料分組在傳輸過程中可能出現的問題。因此,若要解決可能出現的問題,連上 Internet 的計算機還需要安裝TCP協議來提供可靠的並且無差錯的通信服務。
TCP協議被稱作一種端對端協議。這是因為它為兩台計算機之間的連接起了重要作用:當一台計算機需要與另一台遠程計算機連接時,TCP協議會讓它們建立一個連接、發送和接收資料以及終止連接。
傳輸控制協議TCP協議利用重發技術和擁塞控制機制,向應用程序提供可靠的通信連接,使它能夠自動適應網上的各種變化。即使在 Internet 暫時出現堵塞的情況下,TCP也能夠保證通信的可靠。
眾所周知, Internet 是一個龐大的國際性網路,網路上的擁擠和空閑時間總是交替不定的,加上傳送的距離也遠近不同,所以傳輸資料所用時間也會變化不定。TCP協議具有自動調整"超時值"的功能,能很好地適應 Internet 上各種各樣的變化,確保傳輸數值的正確。
因此,從上面我們可以了解到:IP協議只保證計算機能發送和接收分組資料,而TCP協議則可提供一個可靠的、可流控的、全雙工的信息流傳輸服務。
『柒』 用c語言判斷網址怎麼做呢
/*
問題地址:http://..com/question/317437658.html
詳解:
標準的網址(URL)格式是這樣的:
http://user:pass@myserver:port/myapp1/myapp2/index.html?key1=value2&key2=value2#anchor
其中:
[1] http 是協議類型,同樣的還有 ftp 等。【可省略,一般瀏覽器默認都是 http】
[2] user 是用戶名,pass 是密碼。【可省略】
[3] myserver 可以是伺服器的 ip 或者域名,
如網路的 ip = 220.181.112.143 , 域名是:www..com
【這個不能省略】
[4] port 是埠。【可省略,一般默認都是 80】
[5] myapp1,myapp2 是應用程序目錄。【可省略】
index.html 是當前頁面【可省略,默認是 index.html,default.html 等】
[6] key1,value1,key2,value2 是傳遞給網站的參數,【可省略】
[7] anchor 是網頁內的錨點
合法的網址舉例:
www..com
http://__anglfish:[email protected]:80/
http://..com/question/311110938.html?an=0&si=1
判斷網址演算法:
最簡單的當然是正則表達式了。
我們看到標准網址(URL)的 7 個部分,有 6 個分割符號,分別是:
://
@
:
/
?
#
在瀏覽器裡面,只有第 3 部分是必須填寫的,也是我們日常寫的最多的。
用到的資源文件:
頭文件 deelx.h,可以到:http://www.regexlab.com/zh/deelx/下載
下載後放到和源程序同一個目錄下即可。
*/
#include <stdio.h>
#include "deelx.h"
int main(int argc, char * argv[])
{
char text[1000] = "http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor";
// 判斷合法網址的正則表達式
static CRegexpT <char> regexp
(
"(([:alpha:]+)\\://)?((\\w+)\\:(\\w+)@)?(\\w+(\\.\\w+)*)(\\:(\\d+))?((/\\w+)*(\\.\\w+)?)?(\\?((\\w+=\\w+&)*(\\w+=\\w+)))?(#((\\w+)))?)"
);
int i;
printf("輸入一個網址:");
while(scanf("%s",text))
{
MatchResult result = regexp.Match(text);
if ( result.IsMatched() )
{
/*
for(i=0;i<result.MaxGroupNumber();i++)
{
printf("%d=%.*s\n", i,result.GetGroupEnd(i) - result.GetGroupStart(i), text + result.GetGroupStart(i));
}
*/
// 解析網址
printf("網址:%.*s\n", result.GetGroupEnd(0) - result.GetGroupStart(0), text + result.GetGroupStart(0));
printf("協議類型:%.*s\n",result.GetGroupEnd(2) - result.GetGroupStart(2), text + result.GetGroupStart(2));
printf("用戶名:%.*s\n",result.GetGroupEnd(4) - result.GetGroupStart(4), text + result.GetGroupStart(4));
printf("用戶密碼:%.*s\n",result.GetGroupEnd(5) - result.GetGroupStart(5), text + result.GetGroupStart(5));
printf("伺服器IP或域名:%.*s\n",result.GetGroupEnd(6) - result.GetGroupStart(6), text + result.GetGroupStart(6));
printf("伺服器埠:%.*s\n",result.GetGroupEnd(9) - result.GetGroupStart(9), text + result.GetGroupStart(9));
printf("應用程序目錄:%.*s\n",result.GetGroupEnd(10) - result.GetGroupStart(10), text + result.GetGroupStart(10));
printf("查詢參數:%.*s\n",result.GetGroupEnd(14) - result.GetGroupStart(14), text + result.GetGroupStart(14));
printf("錨:%.*s\n\n",result.GetGroupEnd(18) - result.GetGroupStart(18), text + result.GetGroupStart(18));
}
else
{
printf("\"%s\" 是一個非法的網址!!!\n",text);
}
printf("輸入一個網址:");
}
return 0;
}
/*
運行結果:
輸入一個網址:http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
網址:http://user:[email protected]:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
協議類型:http
用戶名:user
用戶密碼:pass
伺服器IP或域名:myserver.com
伺服器埠:800
應用程序目錄:/myapp1/myapp2/index.html
查詢參數:key1=value1&key2=value2
錨:anchor
*/
『捌』 如何只用C語言,通過域名得到IP地址
#include<stdio.h>//printf
#include<string.h>//memset
#include<stdlib.h>//forexit(0);
#include<sys/socket.h>
#include<errno.h>//Forerrno-theerrornumber
#include<netdb.h>//hostent
#include<arpa/inet.h>
inthostname_to_ip(char*,char*);
intmain(intargc,char*argv[])
{
if(argc<2)
{
printf("");
exit(1);
}
char*hostname=argv[1];
charip[100];
hostname_to_ip(hostname,ip);
printf("%sresolvedto%s",hostname,ip);
printf(" ");
}
/*
Getipfromdomainname
*/
inthostname_to_ip(char*hostname,char*ip)
{
structhostent*he;
structin_addr**addr_list;
inti;
if((he=gethostbyname(hostname))==NULL)
{
//getthehostinfo
herror("gethostbyname");
return1;
}
addr_list=(structin_addr**)he->h_addr_list;
for(i=0;addr_list[i]!=NULL;i++)
{
//Returnthefirstone;
strcpy(ip,inet_ntoa(*addr_list[i]));
return0;
}
return1;
}
『玖』 如何用C語言調用ping命令
你可以將127.0.0.1替換成域名如www..com 或者是別人的ip