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

ipv4源碼

發布時間: 2022-07-03 15:51:33

① ipv4與ipv6如何轉換

    IPv4:是互聯網協議的第四版,同時也是第一個被廣泛使用,構成現今互聯網技術的基石的協議;

② IPv4與IPv6的區別是什麼

IPv6與IPv4的區別主要有以下幾點:
1.IPv6的地址空間更大。IPv4中規定IP地址長度為32,即有2^32-1個地址;而IPv6中IP地址的長度為128,即有2^128-1個地址。誇張點說就是,如果IPV6被廣泛應用以後,全世界的每一粒沙子都會有相對應的一個IP地址。
2.IPv6的路由表更小。IPv6的地址分配一開始就遵循聚類(Aggregation)的原則,這使得路由器能在路由表中用一條記錄(Entry)表示一片子網,大大減小了路由器中路由表的長度,提高了路由器轉發數據包的速度。
3.IPv6的組播支持以及對流的支持增強。這使得網路上的多媒體應用有了長足發展的機會,為服務質量控制提供了良好的網路平台。
4.IPv6加入了對自動配置的支持。這是對DHCP協議的改進和擴展,使得網路(尤其是區域網)的管理更加方便和快捷。
5.IPv6具有更高的安全性。在使用IPv6網路中,用戶可以對網路層的數據進行加密並對IP報文進行校驗,這極大地增強了網路安全。

③ LINUX 升級內核時報錯

你是不是用發行版改動過的源代碼編譯的?如果是從 kernel.org 里下載的內核,應該不會出現這種情況。
我以前是用的紅帽的內核。這個裡面的選項依賴性很強,只有一點一點的試了。我的做法是 先用原生的 .config 文件編譯,看能不能通過,再每次少改動一兩個選項,試試看能不能編譯。有一個能加速編譯的工具 ccache 你右以考慮下。

④ 求一份c語言的RTP音頻傳輸源碼

1.項目前期工作(配置好環境)
2.發送端文件編寫(見下面的send.cpp)
3.接收端文件編寫(見下面的receive.cpp)
4.編譯文件
(1)發送端
g++-osendsend.cpp-I/usr/local/include/jrtplib3/-ljrtp
(2)接收端
g++-oreceivereceive.cpp-I/usr/local/include/jrtplib3/-ljrtp
附錄:
(1)send.cpp
[cpp]
#include"rtpsession.h"
#include"rtppacket.h"
#include"rtpudpv4transmitter.h"
#include"rtpipv4address.h"
#include"rtpsessionparams.h"
#include"rtperrors.h"
#include"rtpmemorymanager.h"
#ifndefWIN32
#include<netinet/in.h>
#include<arpa/inet.h>
#else
#include<winsock2.h>
#endif//WIN32
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<string>

//
//.Ifso,itdisplaysanerror
//messageandexists.
//

voidcheckerror(intrtperr)
{
if(rtperr<0)
{
std::cout<<"ERROR:"<<RTPGetErrorString(rtperr)<<std::endl;
exit(-1);
}
}

//
//Themainroutine
//

#ifdefRTP_SUPPORT_THREAD

classMyMemoryManager:publicRTPMemoryManager
{
public:
MyMemoryManager()
{
mutex.Init();
alloccount=0;
freecount=0;
}
~MyMemoryManager()
{
std::cout<<"alloc:"<<alloccount<<"free:"<<freecount<<std::endl;
}
void*AllocateBuffer(size_tnumbytes,intmemtype)
{
mutex.Lock();
void*buf=malloc(numbytes);
std::cout<<"Allocated"<<numbytes<<"bytesatlocation"<<buf<<"(memtype="<<memtype<<")"<<std::endl;
alloccount++;
mutex.Unlock();
returnbuf;
}

voidFreeBuffer(void*p)
{
mutex.Lock();
std::cout<<"Freeingblock"<<p<<std::endl;
freecount++;
free(p);
mutex.Unlock();
}
private:
intalloccount,freecount;
JMutexmutex;
};

#else

classMyMemoryManager:publicRTPMemoryManager
{
public:
MyMemoryManager()
{
alloccount=0;
freecount=0;
}
~MyMemoryManager()
{
std::cout<<"alloc:"<<alloccount<<"free:"<<freecount<<std::endl;
}
void*AllocateBuffer(size_tnumbytes,intmemtype)
{
void*buf=malloc(numbytes);
std::cout<<"Allocated"<<numbytes<<"bytesatlocation"<<buf<<"(memtype="<<memtype<<")"<<std::endl;
alloccount++;
returnbuf;
}

voidFreeBuffer(void*p)
{
std::cout<<"Freeingblock"<<p<<std::endl;
freecount++;
free(p);
}
private:
intalloccount,freecount;
};

#endif//RTP_SUPPORT_THREAD

intmain(void)
{
#ifdefWIN32
WSADATAdat;
WSAStartup(MAKEWORD(2,2),&dat);
#endif//WIN32

MyMemoryManagermgr;
RTPSessionsess(&mgr);
uint16_tportbase,destport;
uint32_tdestip;
std::stringipstr;
intstatus,i,num;

//First,we'

std::cout<<"Enterlocalportbase:"<<std::endl;
std::cin>>portbase;
std::cout<<std::endl;

std::cout<<"EnterthedestinationIPaddress"<<std::endl;
std::cin>>ipstr;
destip=inet_addr(ipstr.c_str());
if(destip==INADDR_NONE)
{
std::cerr<<"BadIPaddressspecified"<<std::endl;
return-1;
}

//Theinet_,but
//,soweuseacallto
//ntohl
destip=ntohl(destip);

std::cout<<"Enterthedestinationport"<<std::endl;
std::cin>>destport;

std::cout<<std::endl;
std::cout<<":"<<std::endl;
std::cin>>num;

//Now,we'llcreateaRTPsession,setthedestination,sendsome
//packetsandpollforincomingdata.

;
RTPSessionParamssessparams;

//IMPORTANT:,otherwise
//
//Inthiscase,we',sowe'll
//putthetimestampunitto(1.0/10.0)
sessparams.SetOwnTimestampUnit(1.0/10.0);

sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(portbase);
status=sess.Create(sessparams,&transparams);
checkerror(status);

RTPIPv4Addressaddr(destip,destport);

status=sess.AddDestination(addr);
checkerror(status);

for(i=1;i<=num;i++)
{
printf(" Sendingpacket%d/%d ",i,num);

//sendthepacket
status=sess.SendPacket((void*)"1234567890",10,0,false,10);
checkerror(status);

sess.BeginDataAccess();

//checkincomingpackets
if(sess.GotoFirstSourceWithData())
{
do
{
RTPPacket*pack;

while((pack=sess.GetNextPacket())!=NULL)
{
//Youcanexaminethedatahere
printf("Gotpacket! ");

//wedon'tlongerneedthepacket,so
//we'lldeleteit
sess.DeletePacket(pack);
}
}while(sess.GotoNextSourceWithData());
}

sess.EndDataAccess();

#ifndefRTP_SUPPORT_THREAD
status=sess.Poll();
checkerror(status);
#endif//RTP_SUPPORT_THREAD

RTPTime::Wait(RTPTime(1,0));
}

sess.BYEDestroy(RTPTime(10,0),0,0);

#ifdefWIN32
WSACleanup();
#endif//WIN32
return0;
}
(2)receive.cpp
[cpp]viewplain
#include"rtpsession.h"
#include"rtppacket.h"
#include"rtpudpv4transmitter.h"
#include"rtpipv4address.h"
#include"rtpsessionparams.h"
#include"rtperrors.h"
#ifndefWIN32
#include<netinet/in.h>
#include<arpa/inet.h>
#else
#include<winsock2.h>
#endif//WIN32
#include"rtpsourcedata.h"
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<string>

//
//.Ifso,itdisplaysanerror
//messageandexists.
//

voidcheckerror(intrtperr)
{
if(rtperr<0)
{
std::cout<<"ERROR:"<<RTPGetErrorString(rtperr)<<std::endl;
exit(-1);
}
}

//
//Thenewclassroutine
//

classMyRTPSession:publicRTPSession
{
protected:
voidOnNewSource(RTPSourceData*dat)
{
if(dat->IsOwnSSRC())
return;

uint32_tip;
uint16_tport;

if(dat->GetRTPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTPDataAddress());
ip=addr->GetIP();
port=addr->GetPort();
}
elseif(dat->GetRTCPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTCPDataAddress());
ip=addr->GetIP();
port=addr->GetPort()-1;
}
else
return;

RTPIPv4Addressdest(ip,port);
AddDestination(dest);

structin_addrinaddr;
inaddr.s_addr=htonl(ip);
std::cout<<"Addingdestination"<<std::string(inet_ntoa(inaddr))<<":"<<port<<std::endl;
}

voidOnBYEPacket(RTPSourceData*dat)
{
if(dat->IsOwnSSRC())
return;

uint32_tip;
uint16_tport;

if(dat->GetRTPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTPDataAddress());
ip=addr->GetIP();
port=addr->GetPort();
}
elseif(dat->GetRTCPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTCPDataAddress());
ip=addr->GetIP();
port=addr->GetPort()-1;
}
else
return;

RTPIPv4Addressdest(ip,port);
DeleteDestination(dest);

structin_addrinaddr;
inaddr.s_addr=htonl(ip);
std::cout<<"Deletingdestination"<<std::string(inet_ntoa(inaddr))<<":"<<port<<std::endl;
}

voidOnRemoveSource(RTPSourceData*dat)
{
if(dat->IsOwnSSRC())
return;
if(dat->ReceivedBYE())
return;

uint32_tip;
uint16_tport;

if(dat->GetRTPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTPDataAddress());
ip=addr->GetIP();
port=addr->GetPort();
}
elseif(dat->GetRTCPDataAddress()!=0)
{
constRTPIPv4Address*addr=(constRTPIPv4Address*)(dat->GetRTCPDataAddress());
ip=addr->GetIP();
port=addr->GetPort()-1;
}
else
return;

RTPIPv4Addressdest(ip,port);
DeleteDestination(dest);

structin_addrinaddr;
inaddr.s_addr=htonl(ip);
std::cout<<"Deletingdestination"<<std::string(inet_ntoa(inaddr))<<":"<<port<<std::endl;
}
};

//
//Themainroutine
//

intmain(void)
{
#ifdefWIN32
WSADATAdat;
WSAStartup(MAKEWORD(2,2),&dat);
#endif//WIN32

MyRTPSessionsess;
uint16_tportbase;
std::stringipstr;
intstatus,i,num;

//First,we'

std::cout<<"Enterlocalportbase:"<<std::endl;
std::cin>>portbase;
std::cout<<std::endl;

std::cout<<std::endl;
std::cout<<"Numberofsecondsyouwishtowait:"<<std::endl;
std::cin>>num;

//Now,we'llcreateaRTPsession,setthedestination
//andpollforincomingdata.

;
RTPSessionParamssessparams;

//IMPORTANT:,otherwise
//
//Inthiscase,we'.
sessparams.SetOwnTimestampUnit(1.0/8000.0);

sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(portbase);
status=sess.Create(sessparams,&transparams);
checkerror(status);

for(i=1;i<=num;i++)
{
sess.BeginDataAccess();

//checkincomingpackets
if(sess.GotoFirstSourceWithData())
{
do
{
RTPPacket*pack;

while((pack=sess.GetNextPacket())!=NULL)
{
//Youcanexaminethedatahere
printf("Gotpacket! ");

//wedon'tlongerneedthepacket,so
//we'lldeleteit
sess.DeletePacket(pack);
}
}while(sess.GotoNextSourceWithData());
}

sess.EndDataAccess();

#ifndefRTP_SUPPORT_THREAD
status=sess.Poll();
checkerror(status);
#endif//RTP_SUPPORT_THREAD

RTPTime::Wait(RTPTime(1,0));
}

sess.BYEDestroy(RTPTime(10,0),0,0);

#ifdefWIN32
WSACleanup();
#endif//WIN32
return0;
}

⑤ c#winform 為什麼有時候獲取不到ip,有時候獲取的ip前有:: ,那位給個有效的源碼

你取的可能是IPv6的地址。在某台機子上如果配置的網卡多或一個網卡設置了多個IP,就需要你自己判斷一下哪個是你需要的IP。

System.Net.IPAddress[] address = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList;
//address數組中可能會有多個,如win7中除了ipv4還會有ipv6的,還有可能你設置了多個IP。
//自己判斷下該取哪個數組中的IP地址。
string strIP = address[0].ToString();

python 判斷是ipv6還是ipv4 inet

ipv4與ipv6地址如何轉換的python解決辦法

ipv4與ipv6地址如何轉換的python解決辦法。要想知道ipv4與ipv6地址轉換的問題,首先要了解它的概念。

ipv4與ipv6地址是什麼簡單的來說一下:
IPv4:是互聯網協議的第四版,同時也是第一個被廣泛使用,構成現今互聯網技術的基石的協議;
IPv6:是互聯網工程任務組設計的用於替代現行版本IPv4的下一代IP協議;
目前IP協議的版本號是IPv4,它的下一個版本就是IPv6。

ipv4與ipv6地址如何轉換的python解決辦法,源碼如下:(需要用到twisted.python.compat及struct和python socket方法)

import struct,socket
#import twisted.python.compat #導入twisted.python.compat 更方便

# ipv4數字地址
def ipv4_to_string(ipv4):
ipv4_n = socket.htonl(ipv4)
data = struct.pack('I', ipv4_n)
ipv4_string = socket.inet_ntop(socket.AF_INET, data)
return ipv4_string

def ipv4_from_string(ipv4_string):
data = socket.inet_pton(socket.AF_INET, ipv4_string)
ipv4_n = struct.unpack('I', data)
ipv4 = socket.ntohl(ipv4_n[0])
return ipv4

def ipv4_readable2int(ipv4):
return int(ipv4)

def ipv4_int2readable(ipv4):
return str(ipv4)

# ipv6用四個整數(tuple或用,分開的字元串)表示
def ipv6_to_string(ipv6):
ipv6_n = (socket.htonl(ipv6[0]),
socket.htonl(ipv6[1]),
socket.htonl(ipv6[2]),
socket.htonl(ipv6[3]))
data = struct.pack('IIII', ipv6_n[0], ipv6_n[1], ipv6_n[2], ipv6_n[3])
ipv6_string = socket.inet_ntop(socket.AF_INET6, data)

return ipv6_string

def ipv6_from_string(ipv6_string):
data = socket.inet_pton(socket.AF_INET6, ipv6_string)
ipv6_n = struct.unpack('IIII', data)
ipv6 = (socket.ntohl(ipv6_n[0]),
socket.ntohl(ipv6_n[1]),
socket.ntohl(ipv6_n[2]),
socket.ntohl(ipv6_n[3]))

return ipv6

def ipv6_tuple2readable(ipv6):
return str(ipv6[0]) + ',' + str(ipv6[1]) + ',' + str(ipv6[2]) + ',' + str(ipv6[3])

def ipv6_readable2tuple(ipv6):
return tuple(ipv6.split(','))

#win32 下實現 inet_pton 和 inet_ntop
def inet_ntop(family, ipstr):
if family== socket.AF_INET:
return socket.inet_ntoa(ipstr)
elif family== socket.AF_INET6:
v6addr = ':'.join(('%02X%02X' % (ord(i), ord(j)))
for i,j in zip(ipstr[::2], ipstr[1::2]))
return v6addr

#www.iplaypy.com

def inet_pton(family, addr):
if family== socket.AF_INET:
return socket.inet_aton(addr)

elif family== socket.AF_INET6:
if '.' in addr: # a v4 addr
v4addr = addr[addr.rindex(':')+1:]
v4addr = socket.inet_aton(v4addr)
v4addr = map(lambda x: ('%02X' % ord(x)), v4addr)
v4addr.insert(2, ':')
newaddr = addr[:addr.rindex(':')+1] + ''.join(v4addr)
return inet_pton(family, newaddr)
dbyts = [0]* 8 # 8 groups
grps = addr.split(':')

for i,v in enumerate(grps):
if v:
dbyts[i] = int(v, 16)
else:
for j, w in enumerate(grps[::-1]):
if w:
dbyts[7-j] = int(w, 16)
else:
break
break
return ''.join( (chr(i//256) + chr(i%256)) for i in dbyts)

else:
raise RuntimeError("What family?")

⑦ ipv4與ipv6如何轉換計算方法是什麼

ipv4與ipv6不需要進行轉換,因為為了實現IPv4-IPv6互通,IPv4地址會嵌入IPv6地址中,此時地址常表示為:X:X:X:X:X:X:d.d.d.d,前96b採用冒分十六進製表示,而最後32b地址則使用IPv4的點分十進製表示。

計算方法:直接截取ipv6的後32b就是ipv4。

(7)ipv4源碼擴展閱讀:

IPv6與IPv4之間的過渡技術

IPv6不可能立刻替代IPv4,因此在相當一段時間內IPv4和IPv6會共存在一個環境中。要提供平穩的轉換過程,使得對現有的使用者影響最小,就需要有良好的轉換機制。

這個議題是IETF ngtrans工作小組的主要目標,有許多轉換機制被提出,部分已被用於6Bone上。IETF推薦了雙協議棧、隧道技術以及網路地址轉換等轉換機制:

一、IPv6/IPv4雙協議棧技術

二、隧道技術

三、網路地址轉換技術
網路地址轉換(Network Address Translator,NAT)技術是將IPv4地址和IPv6地址分別看作內部地址和全局地址,或者相反。

例如,內部的IPv4主機要和外部的IPv6主機通信時,在NAT伺服器中將IPv4地址(相當於內部地址)變換成IPv6地址(相當於全局地址),伺服器維護一個IPv4與IPv6地址的映射表。

反之,當內部的IPv6主機和外部的IPv4主機進行通信時,則IPv6主機映射成內部地址,IPv4主機映射成全局地址。NAT技術可以解決IPv4主機和IPv6主機之間的互通問題 。

⑧ 2.6內核源碼netfilter中NF_INET_PRE_ROUTING跟NF_IP_PRE_ROUTING啥關系

認真看頭文件,頭文件上面有說明。
兩者的值是一樣的。
NF_IP_*和NF_IP6_*都不能用在新的內核,內核/內核模塊要用NF_INET_*。

我記得沒錯的話,這種轉變是從2.6.25的內核開始,當時還沒有NF_INET_*,全部都用NF_IP系列的。

現在,NF_IP_*只是為了兼容用戶程序而保留的,一般應該用NF_INET_*。
你可以理解成變數換了個名字。

熱點內容
如何改微信支付密碼 發布:2024-11-17 21:41:33 瀏覽:703
雲狗通過什麼連接伺服器 發布:2024-11-17 21:11:34 瀏覽:14
qq郵箱訪問許可權的限制 發布:2024-11-17 21:07:16 瀏覽:422
查IP能查到在哪裡買的伺服器嗎 發布:2024-11-17 20:56:42 瀏覽:683
rust為什麼連接不了伺服器 發布:2024-11-17 20:56:37 瀏覽:553
修改欄位值的sql語句 發布:2024-11-17 20:56:36 瀏覽:569
無法啟用ftp服務 發布:2024-11-17 20:33:54 瀏覽:838
安卓平板的管理工具在哪裡 發布:2024-11-17 20:21:48 瀏覽:522
淘寶整機怎麼配置 發布:2024-11-17 20:21:05 瀏覽:291
linux如何安裝源碼包 發布:2024-11-17 20:15:40 瀏覽:198