當前位置:首頁 » 操作系統 » tcpip源碼

tcpip源碼

發布時間: 2022-05-23 20:46:50

❶ 求一個Android studio 的 tcpip 客戶端收發的實例,希望大俠們能給一下源碼工程

java">
最基礎的寫法


server端
publicclassMyTcpServer{
publicstaticvoidmian(String[]args){
try{
//構造一個伺服器端埠為12345的socket伺服器;
ServerSocketserverSocket=newServerSocket(12345);
//等待接收一個socket客戶端的連接,並得到客戶端的socket對象。
//此方法在沒有客戶端連接的時候,會阻塞。
Socketclient=serverSocket.accept();
//獲得socket客戶端的輸入管道
InputStreamis=client.getInputStream();
//獲得socket客戶端的輸出管道
OutputStreamos=client.getOutputStream();
byte[]buffer=newbyte[1024];
intlen=is.read(buffer);
System.out.println("-->"+newString(buffer));

os.write("Helloclient".getBytes());
os.flush();
is.close();
os.close();
client.close();
serverSocket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}

}
client端
{
@Override
publicvoidrun(){
super.run();
try{
Socketclient=newSocket("192.168.3.173",12345);//IP為伺服器IP,埠號為伺服器埠號。
InputStreamin=client.getInputStream();
OutputStreamout=client.getOutputStream();

out.write("Helloserver".getBytes());//如果在伺服器端先進行讀操作。那麼客戶端就應先進行寫操作。
//這樣交替進行,不然將都阻塞在Read讀操作。
out.flush();

byte[]buffer=newbyte[1024];
intlen=in.read();
in.read(buffer);
System.out.println("--->"+newString(buffer));


}catch(IOExceptione){
e.printStackTrace();
}
}
}
}

❷ TCP和UDP協議從包頭上講,是怎樣實現分段的IP協議是怎樣分割上層數據包的。

可以現在lwip 學習一下,這個是開源的TCPIP源碼。可以看TCP和IP的相關函數。
建議再裝一下,source insight 看一下源碼

❸ 我想重寫tcp/ip的協議,那裡有vb版的源碼

做不到!做到了也不可能用,網路是沒有人管理的,但是為了讓網路更好的運行,所以就有了協議,你把協議都改了,你還能~~~~~~~除非~~~~~~~~就算有人會也不敢發表的!

❹ tcp/ip共享資源系統源碼

【問題描述】: 電腦運行慢,操作起來電腦需要反映一段時間。 【原因分析】: 虛擬內存不能及時釋放,虛擬內存設置較小,硬體溫度過高。 【簡易步驟】: 1、【軟體小助手】中的【一鍵加速】 2、【功能大全】中的【魯大師】 3、手動檢查虛擬內存 【解決方案】 1、【軟體小助手】中的【一鍵加速】/span> 2、【功能大全】中的【魯大師】 3、手動檢查虛擬內存

❺ tcp/ip協議詳解都是具體的代碼嗎

概括的說TCP/IP協議是(傳輸控制協議/網間協議)TCP/IP 協議集確立了 Internet 的技術基礎。全稱Transmission Control Protocol/Internet Protocol。中譯名為傳輸控制協議/網際網路互聯協議,又名網路通訊協議,是Internet最基本的協議、Internet國際互聯網路的基礎,由網路層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入網際網路,以及數據如何在它們之間傳輸的標准。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給網際網路的每一台電腦規定一個地址。
診斷TCP IP協議網路故障時可能會使人灰心喪氣,不過也充滿了樂趣。傳統的TCP IP協議網路故障我們已經大致了解,但其另一種方法結構化的方法很多人都不太清楚。下面,我們就來看看其故障診斷的方法。
通常,TCP IP協議網路故障的結構化診斷的方法由三個關鍵部分組成:
一、診斷故障措施
(1)驗證有關客戶端和伺服器端的路由選擇的連通性
要使用ping,pathping,tracert,或其它類似的工具,便於在網路層上驗證端到端的TCP IP的連接性;採用數據包嗅探以監視傳輸層會話;使用nslookup,telnet和其它的工具來診斷包括域名解析問題、身份驗證等應用層問題。
(2)驗證有關客戶端、伺服器和網路架構硬體的物理媒體
檢查電纜,確保網路適配器正確安裝,並進一步查找、驗證可以顯示媒體斷開狀態的網路連接。
(3)驗證有關客戶端、伺服器、網路架構硬體的TCP IP協議配置
在客戶端上這意味著檢查IP地址、子網掩碼、默認網關、DNS設置等等。對於網路架構硬體而言,也就是指路由器上的路由表和Internet網關。
二、幾個方面的因素
標志性信息:客戶端機器上的出錯消息,登錄對話框等等。
期間:連續的、間斷的,還是偶爾的,何時開始等。
出現問題的連接類型:物理層、網路層、傳輸層還是應用層?身份驗證還是訪問控制等等。
其間的網路:線纜(如果不是無線的話)、集線器、交換機、路由器、防火牆、代理伺服器,以及客戶端和伺服器之間的其它網路架構。
范圍:一個或多個有關的客戶端/伺服器端。
客戶端:即出現問題的客戶端
伺服器端:客戶無法訪問的伺服器、列印機或其它的網路資源(如互聯網)等。
環境:可能會影響你的網路的外部情況,如電源的波動、建築物的維護等等。
三、理解和方法
(2)問一些恰當的問題對故障診斷很關鍵
要學會何時按部就班,何時以跳躍性思維直奔主題是故障診斷藝術的本質所在,這還括充分使用你的左右腦
,即要有充分的想像和縝密的思維。
(3)踏踏實實地測試,並隔離問題

❻ 如何偽造tcp數據包,並進行正確的校驗的例子演示及源碼

下面的程序是在linux下進行tcp偽造的一個例子:涉及原始套接字和tcp的校驗演算法

/************************tcp_pseudo.c********************/
/** Author :cbchen. */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INTERFACE "eth0"
#define IP ""
/*Prototype area*/
int Open_Packet_Socket();
int Open_Raw_Socket();
int Set_Promisc(char *interface, int sock);
void send_tcp_ack(int sockfd,struct sockaddr_in *addr);
unsigned short check_sum(unsigned short *addr,int len);
struct ip *iprecv;
struct tcphdr *tcprecv;
struct sockaddr_in addr;

int main()
{
int sockfd,sendfd,bytes_recieved;

char buffer[1518];
u_char *buf2;
char saddr[20],daddr[20];

sockfd=Open_Packet_Socket();
sendfd=Open_Raw_Socket();
//printf("sockfd:%d/tsendfd:%d/n",sockfd,sendfd);

int on=1;
/******** 設置IP數據包格式,告訴系統內核模塊IP數據包由我們自己來填寫 ***/
setsockopt(sendfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));
Set_Promisc(INTERFACE, sockfd);
int count=1;

while(1)
{

bytes_recieved = recvfrom(sockfd, buffer, 1518, 0, NULL, NULL);

buf2=buffer;
buf2+=14;
iprecv=(struct ip *)buf2;
//iprecv+=sizeof(struct ethhdr*);
/*See if this is a TCP packet*/
if(iprecv->ip_v == 4&iprecv->ip_p == 6) {
printf("---------------------------Number %d packet-----------------------------------------------/n",count);
count++;
printf("/nBytes received ::: %5d/n",bytes_recieved);
printf("ip version:%u/n",iprecv->ip_v);

printf("IP包頭解碼:/n");
printf("Source ip:%s/t",inet_ntoa(iprecv->ip_src));
printf("Dest ip:%s/t",inet_ntoa(iprecv->ip_dst));
printf("proto:%u/n",iprecv->ip_p);
buf2+=iprecv->ip_hl<<2;
printf("TCP包頭解碼:/n");
tcprecv = (struct tcphdr*)buf2;
//tcprecv = (struct tcphdr *)(buffer + (iprecv->ip_hl<<2));
printf("Source port :::%d/n",ntohs(tcprecv->source));
printf("Dest port :::%d/n",ntohs(tcprecv->dest));
printf("seq num:%u/n",ntohl(tcprecv->seq));
printf("ack num:%u/n",ntohl(tcprecv->ack_seq));
printf("urg:%x/tack:%x/tpsh:%x/trst:%x/tsyn:%x/tfin:%x/n",tcprecv->urg,tcprecv->ack,tcprecv->psh,tcprecv->rst,tcprecv->syn,tcprecv->fin);
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
//addr2.sin_port=htons(thdr->source);
addr.sin_port=tcprecv->source;
//addr2.sin_addr=iphdr->ip_src;
addr.sin_addr=iprecv->ip_src;

/********* 發送阻隔包了!!!! ****/
if(tcprecv->syn==1&tcprecv->urg!=1&tcprecv->ack!=1&tcprecv->psh!=1&tcprecv->rst!=1&tcprecv->fin!=1)
{
//send_tcp_ack(sendfd,&addr);
//printf("It's a syn pocket!/n");
}
}
}
close(sockfd);
close(sendfd);
}
//end main

/******* 發送阻隔包的實現 *********/
/*
void send_tcp_ack(int sockfd,struct sockaddr_in *addr)
{
struct send_tcp
{
struct iphdr ip;
struct tcphdr tcp;
} send_tcp;

struct pseudo_header
{
unsigned int source_address;
unsigned int dest_address;
unsigned char placeholder;
unsigned char protocol;
unsigned short tcp_length;
struct tcphdr tcp;
} pseudo_header;

int tcp_socket;
struct sockaddr_in sin;
int sinlen;

// form ip packet
send_tcp.ip.ihl = 5;
send_tcp.ip.version = 4;
send_tcp.ip.tos = 0;
send_tcp.ip.tot_len = htons(40);
send_tcp.ip.frag_off = 0;
send_tcp.ip.ttl = 64;
send_tcp.ip.protocol = IPPROTO_TCP;
send_tcp.ip.check = 0;
send_tcp.ip.saddr = iprecv->ip_dst.s_addr;
send_tcp.ip.daddr = addr->sin_addr.s_addr;

// form tcp packet
send_tcp.tcp.dest = addr->sin_port;
send_tcp.tcp.source = tcprecv->dest;
send_tcp.tcp.ack_seq = htonl(ntohl(tcprecv->seq)+0x01);
send_tcp.tcp.res1 = 0;
send_tcp.tcp.doff = 5;
send_tcp.tcp.fin = 0;
send_tcp.tcp.syn = 1;
send_tcp.tcp.rst = 0;
send_tcp.tcp.psh = 0;
send_tcp.tcp.ack = 1;
send_tcp.tcp.urg = 0;
send_tcp.tcp.res2 = 0;
send_tcp.tcp.window = htons(512);
send_tcp.tcp.check = 0;
send_tcp.tcp.urg_ptr = 0;
send_tcp.tcp.seq = tcprecv->seq;

// set fields that need to be changed
//send_tcp.tcp.source++;
send_tcp.ip.id = 0 ;
//send_tcp.tcp.seq++;
send_tcp.tcp.check = 0;
send_tcp.ip.check = 0;

// calculate the ip checksum
send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);

// set the pseudo header fields
pseudo_header.source_address = send_tcp.ip.saddr;
pseudo_header.dest_address = send_tcp.ip.daddr;
pseudo_header.placeholder = 0;
pseudo_header.protocol = IPPROTO_TCP;
pseudo_header.tcp_length = htons(20);
b((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32);
sinlen = sizeof(sin);
int count;
for(count=0;count<2;count++){
if(sendto(sockfd, &send_tcp, 40, 0, (struct sockaddr *)addr,sizeof(struct sockaddr))<0)
{
printf("sendto error!/n");
}
else
{
printf("send packet ok!/n");
}

}
*/

/* 下面是首部校驗和的演算法 */
unsigned short in_cksum(unsigned short *addr, int len) /* function is from ping.c */
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer =0;

while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *)(&answer) = *(u_char *)w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return(answer);
}
int Open_Packet_Socket()
{
int sock;
sock=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));
if (sock==-1)
{
perror("socket");
exit(errno);
}
printf("sockfd:%d/n",sock);
return(sock);
}
int Open_Raw_Socket()
{
int sock;
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
if (sock==-1)
{
perror("socket");
exit(errno);
}
printf("sendfd:%d/n",sock);
return(sock);
}

int Set_Promisc(char *interface, int sockfd )
{
struct ifreq ifr;
strncpy(ifr.ifr_name,interface,strnlen(interface)+1);
if (ioctl(sockfd,SIOCGIFFLAGS,&ifr)==-1)
{
perror("ioctl1");
exit(errno);
}
ifr.ifr_flags |= IFF_PROMISC;
if (ioctl(sockfd,SIOCSIFFLAGS,&ifr))
{
perror("ioctl2");
exit(errno);
}

// printf("Setting interface ::: %s ::: to promisc...ok..../n", interface);
return(1);
}

❼ 求TCP/IP 源代碼 要求有中文注釋~~~~~

lz說的應該不是協議,而是實現TCP/IP協議內容的具體代碼,如C語言等;《用TCP/IP進行網際互聯第二卷:設計、實現與內核》(第三版)【Internetworking
With
TCP/IP
Vol
II:Designed,Implementation,and
Internals
Third
Edition】上有C代碼實現,但沒有中文注釋,只有英文注釋,我想應該沒有中文注釋教材的吧,有也不好找的,反正我沒見過,呵呵!

❽ 請問有沒有C#的 TCP/IP 穿透的源碼,要會打洞的哪種,謝謝!

我最簡單方法告訴你好了 ,你像伺服器發送信息的時候,你的路由器會開一個外網ip,
比如說你的IP埠:192.168.1.2:8000->(伺服器)76.73.46.122:9000,你的外網IP(123.46.177.23)對把,NAT會自動幫你開一個埠,比如123.46.177.23:62000好了,然後你伺服器只要發數據到123.46.177.23:62000這個埠,你的內網就自動收到。明白了把 那個NAT埠是自動開 不用人工去設置,

如果還不懂的話 等我有空寫一個控制項 就知道了

❾ 謝有TCP/IP詳解的代碼有能發我一分嗎

一、分層

1、網路協議通常分不同層次進行開發,每一層分別負責不同的通信功能。

2、TCO/IP通常被認為是一個四層協議系統:

1)、鏈路層,有時候也被稱作數據鏈路層或網路介面層,通常包括操作系統中的設備驅動程序和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。

2)、網路層,有時也稱作互聯網層,處理分組在網路中的活動。在TCP/IP協議族中,網路層協議包括IP協議(網際協議),ICMP協議(internet互聯網控制報文協議),以及IGMP協議(internet組管理協議)。

3)、運輸層主要為兩台主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。

4)、應用層負責處理特定的應用程序細節。

3、在TCP/IP協議族中,網路層IP提供的是一個不可靠的服務,它只是盡可能快地把分組從源節點送到目的節點,不提供任何可靠性的保證。另一方面,TCP在不可靠的IP層上提供一個可靠的運輸層。

二、TCP/IP的分層

1、TCP/IP協議族中不同層次的協議


1)、幀頭和幀尾所標注的數字是典型乙太網首部的長度。

2)、乙太網數據幀的物理特性是其長度必須在46~1500位元組之間。

3)、圖中IP和網路介面層傳送的數據單元應該是分組。分組既可以是一個IP數據報,也可以是IP數據報的一個片。

4)、UDP數據和TCP數據基本一致。唯一不同的是UDP傳送給IP的信息單元稱作UDP數據報,而UDP首部的長度為8位。

5)、由於TCP、UDP、ICMP、IGMP都要向IP傳送數據,因此IP必須在生成的IP首部加入某種標識,以表明數據屬於那一層。IP在首部存入一個長度為8位的數值,稱作協議域。1表示IGMP協議,2表示ICMP協議,6表示TCP協議,17表示UDP協議。

6)、TCP、UDP、網路介面也要在首部加入標識符。

2、當應用程序用TCP傳送數據時,數據被送入協議棧中,然後逐個通過每一層直到被當作一串比特流送入網路。其中每一層對收到的數據都要添加一些首部信息(有時還要添加尾部信息)。

3、TCP傳給IP的數據單元稱作TCP報文段或簡為TCP段,IP傳給網路介面層的數據單元稱作IP數據報。通過乙太網傳輸的比特流稱作數據幀。

六、分用

當目的主機收到一個乙太網數據幀時,數據就開始從協議棧中由低往上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接受數據的上層協議。這個過程稱作分用。還有乙太網數據幀的分用過程

七、客戶-伺服器模型

1、伺服器提供的服務分兩種類型:

1)、重復型

2)、並發型

2、重復型伺服器通過以下步驟進行交互:

I、等待一個客戶請求的到來

II、處理客戶請求

III、發送響應給發送請求的客戶

IV、返回第I步

3、並發型伺服器採用以下步驟:

I、等待一個客戶請求的到來

II、啟動一個新的伺服器來處理這個請求

III、返回第I步

4、一般來說,TCP伺服器是並發的,而UDP伺服器是重復的,但也存在一些例外。

八、埠號

1、伺服器一般都是通過知名埠號來識別的。客戶使用臨時設定的埠號。

2、大多數TCP/IP實現給臨時埠分配1024~5000之間的埠號。大於5000的埠號是為其他伺服器預留的。

3、Uinx系統有保留埠號的概念。只有超級用戶特權的進程才允許給它自己分配一個保留埠號。

❿ tcp/ip 源碼剖析 怎麼樣

先認清你自己學習的出發點吧, 是應用層面方向還是內核協議棧

應用層面,我不是很了解

內核協議棧個人學習流程大概如下:

首先看TCP/IP卷2,理解2層(MAC地址), 3層(IP, 路由),4層(TCP,UDP,ICMP,IGMP)
這里主要理解的框架,先把網路協議層從下到上(或從上到下)理一遍

然後,建議你看<深入理解Linux網路技術內幕> 能看英文版最好

按照那本書的目錄,找找網上的資料
稍微理解下sk_buff和net_device這兩個結構
(不要想著去看懂, 要完全看懂這個結構,會花費比較多的時間,而且還要結合網路子系統中的各個應用)

然後,直接把整本書完整看一遍,不要刻意去扣細節,第1遍看這本書只是為了把網路子系統的內部框架建立起來

看完1遍,肯定有自己的見解了,然後,再根據自己需要的,去扣代碼細節

代碼方面,建議不要找最新的代碼,我看這本書選的2.6.16的,最新代碼的話,和這本書對應不上,不便於理解基礎

<深入理解Linux網路技術內幕> 這本書,除了沒有TCP/UDP的詳細解說,至少我沒發現比他還好的書

熱點內容
微信猜拳演算法 發布:2024-10-26 19:23:35 瀏覽:389
android編譯第三方庫 發布:2024-10-26 19:14:20 瀏覽:614
蘋果手機怎麼用藍牙傳照片給安卓 發布:2024-10-26 18:57:40 瀏覽:614
ios8程序加密 發布:2024-10-26 18:30:27 瀏覽:532
密碼門鎖沒電了用什麼數據線 發布:2024-10-26 18:21:11 瀏覽:854
linuxloop 發布:2024-10-26 18:20:46 瀏覽:931
linuxvg查看 發布:2024-10-26 18:09:51 瀏覽:585
圖標是鑰匙的加密軟體 發布:2024-10-26 18:07:31 瀏覽:625
vip七九寶琉璃怎麼配置魂環 發布:2024-10-26 17:51:17 瀏覽:571
opencv編譯linux 發布:2024-10-26 17:49:50 瀏覽:983