The lowest price of bitcoin in 14 years
When bitcoin first appeared in 2009, its price was less than 1 cent. One dollar could be converted into 1300 bitcoins, that is to say, seven yuan could be converted into 1300 bitcoins
on May 5, 2017, bitfinex, an overseas digital currency trading platform, quoted a price. Bitcoin once hit US $1700, about RMB 11737
extended information:
in China, some Taobao stores have also begun to accept the use of bitcoin, and businesses will graally increase
in October 2013, the first bitcoin quarterly, one bit, was released
on October 15, 2013, the network accelerator service of the network announced its support for bitcoin
on October 26, 2013, btcmini reported that GBL was hacked
on October 31, 2013, Lei Teng, a famous Internet lawyer, proposed the event of "filing a case to investigate the closure of GBL bitcoin trading platform as soon as possible", analyzed the "value function" and "use function" of bitcoin, and bitcoin should be governed by relevant laws
on December 5, 2013, notice of the Ministry of instry and information technology of the people's Bank of China, China Banking Regulatory Commission, China Securities Regulatory Commission and China Insurance Regulatory Commission on preventing bitcoin risk: bitcoin is a specific virtual commodity; Bitcoin trading is a kind of commodity trading on the Internet. Ordinary people have the freedom to participate in it at their own risk
on September 4, 2017, the announcement of the people's Bank of China Central Network Information Office, Ministry of instry and information technology, State Administration for Instry and commerce, China Banking Regulatory Commission, China Securities Regulatory Commission and China Insurance Regulatory Commission on preventing the risk of token issuance financing: it is prohibited to engage in token issuance financing activities (ICO)
the trading platform shall not engage in the exchange business between legal tender and token, or virtual currency, or buy or sell token or virtual currency as a central counter party, or provide pricing, information intermediary and other services for token or virtual currency
on November 2, 2018, the people's Bank of China released the 12th topic of China financial stability report 2018, which talked about "encrypted assets"
according to the data of coindesk digital currency trading platform, the price of bitcoin once fell below US $6000 in 18 years, which has dropped by 70% compared with the highest value of US $20000 in 2017
"the price movements we are seeing now may seem drastic, but they are quite normal for this market." Etiro's senior market analyst, MATI Greenspan, wrote in an email to CNBC
with the decline of bitcoin, most digital currencies are affected, and other digital currencies are not much better. Most digital currencies are down by more than 10%. But in the long run, the future of digital currency is worth looking forward to.
ten years from now, the price of bitcoin is unknown On December 17, 2017, bitcoin reached an all-time high of $19850. On June 22, 2019, the price of bitcoin broke through the $10000 mark. Bitcoin prices fluctuated around 10200, rising nearly 7% in 24 hours
On June 26, the price of bitcoin broke through US $12000, a 17 month high since January last year. In the morning of June 27, the price of bitcoin was close to $14000, reaching a new high of the yeartherefore, the future price trend of bitcoin is uncontrollable
4, low transaction costs:
bitcoin can be remitted free of charge, but in the end, a transaction fee of about 1 bit will be charged for each transaction to ensure faster transaction execution
About 400 percent
when bitcoin first appeared in 2009, one dollar could buy almost 1300 bitcoins. Before April 2011, the price of each bitcoin was always below $1. In June 2011, the highest price of bitcoin rose to $30. Then, the price almost fell within a week. In 2012, the price of bitcoin once fell below $2
further dropped to $114 on January 14, 2015. Since then, bitcoin has begun to rise again. In 2017, after the bitcoin ETF fund was rejected by the US Securities Regulatory Commission, bitcoin plummeted by $315 to below $1000. After that, it rose again. In the first four months of this year, the price of bitcoin and an ounce of gold were almost equal
However, with the strong rise of bitcoin in this round, the price of bitcoin has exceeded the price of an ounce of gold. On April 26, the price of bitcoin was $1282.97, compared with $1264 for an ounce of gold. Bitcoin has surpassed gold in price
extended data
in 2016, there were dozens of bitcoin exchanges in the world, and the trading volume of bitcoin in most countries and regions increased sharply. Among the countries and regions with the highest growth rate, the trading volume of bitcoin in Japan is second only to China, ranking second in the world; The local bitcoin trading volume in Venezuela increased by more than 913%
South Korea has become the sixth largest bitcoin trading market in the world, Korean people can buy bitcoin from a large number of convenience stores, and korbit's trading volume currently accounts for 70% of the South Korean market; Local bitcoin transactions in Colombia increased by about 370%; Bitcoin markets in Malaysia, Russia and Australia are also developing rapidly. Bitcoin trading in China once accounted for more than 80% of the global trading volume
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netpacket/packet.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <errno.h>
/* 接收缓冲区大小 */
#define RCV_BUF_SIZE 1024 * 5
/* 接收缓冲区 */
static int g_iRecvBufSize = RCV_BUF_SIZE;
static char g_acRecvBuf[RCV_BUF_SIZE] = {0};
/* 物理网卡接口,需要根据具体情况修改 */
static const char *g_szIfName = "eth1";
/* 以太网帧封装的协议类型 */
static const int g_iEthProId[] = { ETHERTYPE_PUP,
ETHERTYPE_SPRITE,
ETHERTYPE_IP,
ETHERTYPE_ARP,
ETHERTYPE_REVARP,
ETHERTYPE_AT,
ETHERTYPE_AARP,
ETHERTYPE_VLAN,
ETHERTYPE_IPX,
ETHERTYPE_IPV6,
ETHERTYPE_LOOPBACK
};
static const char g_szProName[][24] = {
"none", "xerox pup", "sprite", "ip", "arp",
"rarp", "apple-protocol", "apple-arp",
"802.1q", "ipx", "ipv6", "loopback"
};
/* 输出MAC地址 */
static void ethmp_showMac(const int iType, const char acHWAddr[])
{ int i = 0;
if (0 == iType)
{
printf("SMAC=[");
}
else
{
printf("DMAC=[");
}
for(i = 0; i < ETHER_ADDR_LEN - 1; i++)
{
printf("%02x:", *((unsigned char *)&(acHWAddr[i])));
}
printf("%02x] ", *((unsigned char *)&(acHWAddr[i])));
}
/* 物理网卡混杂模式属性操作 */
static int ethmp_setPromisc(const char *pcIfName, int fd, int iFlags)
{ int iRet = -1;
struct ifreq stIfr;
/* 获取接口属性标志位 */
strcpy(stIfr.ifr_name, pcIfName);
iRet = ioctl(fd, SIOCGIFFLAGS, &stIfr);
if (0 > iRet)
{ perror("[Error]Get Interface Flags");
return -1;
}
if (0 == iFlags)
{ /* 取消混杂模式 */
stIfr.ifr_flags &= ~IFF_PROMISC;
}
else
{ /* 设置为混杂模式 */
stIfr.ifr_flags |= IFF_PROMISC;
}
iRet = ioctl(fd, SIOCSIFFLAGS, &stIfr);
if (0 > iRet)
{ perror("[Error]Set Interface Flags");
return -1;
}
return 0;
}
/* 获取L2帧封装的协议类型 */
static char *ethmp_getProName(const int iProNum)
{ int iIndex = 0;
for(iIndex = 0; iIndex < sizeof(g_iEthProId) / sizeof(g_iEthProId[0]); iIndex++)
{ if (iProNum == g_iEthProId[iIndex])
{
break;
}
}
return (char *)(g_szProName[iIndex + 1]);
}
/* Init L2 Socket */
static int ethmp_initSocket()
{ int iRet = -1;
int fd = -1;
struct ifreq stIf;
struct sockaddr_ll stLocal = {0};
/* 创建SOCKET */
fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if (0 > fd)
{ perror("[Error]Initinate L2 raw socket");
return -1;
}
/* 网卡混杂模式设置 */
ethmp_setPromisc(g_szIfName, fd, 1);
/* 设置SOCKET选项 */
iRet = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &g_iRecvBufSize,sizeof(int));
if (0 > iRet)
{ perror("[Error]Set socket option");
close(fd);
return -1;
}
/* 获取物理网卡接口索引 */
strcpy(stIf.ifr_name, g_szIfName);
iRet = ioctl(fd, SIOCGIFINDEX, &stIf);
if (0 > iRet)
{ perror("[Error]Ioctl operation");
close(fd);
return -1;
}
/* 绑定物理网卡 */
stLocal.sll_family = PF_PACKET;
stLocal.sll_ifindex = stIf.ifr_ifindex;
stLocal.sll_protocol = htons(ETH_P_ALL);
iRet = bind(fd, (struct sockaddr *)&stLocal, sizeof(stLocal));
if (0 > iRet)
{ perror("[Error]Bind the interface");
close(fd);
return -1;
}
return fd;
}
/* 解析Ethernet帧首部 */
static int ethmp_parseEthHead(const struct ether_header *pstEthHead)
{ unsigned short usEthPktType;
if (NULL == pstEthHead)
{ return -1;}
/* 协议类型、源MAC、目的MAC */
usEthPktType = ntohs(pstEthHead->ether_type);
printf(">>>\nEth-Pkt-Type:0x%04x(%s) ", usEthPktType, ethmp_getProName(usEthPktType));
ethmp_showMac(0, pstEthHead->ether_shost);
ethmp_showMac(1, pstEthHead->ether_dhost);
return 0;
}
/* 解析IP数据包头 */
static int ethmp_parseIpHead(const struct ip *pstIpHead)
{ struct protoent *pstIpProto = NULL;
if (NULL == pstIpHead)
{ return -1;}
/* 协议类型、源IP地址、目的IP地址 */
pstIpProto = getprotobynumber(pstIpHead->ip_p);
if(NULL != pstIpProto)
{ printf("\nIP-Pkt-Type:%d(%s) ", pstIpHead->ip_p, pstIpProto->p_name); }
else
{ printf("\nIP-Pkt-Type:%d(%s) ", pstIpHead->ip_p, "None");}
printf("SAddr=[%s] ", inet_ntoa(pstIpHead->ip_src));
printf("DAddr=[%s]\n", inet_ntoa(pstIpHead->ip_dst));
return 0;
}
/* 数据帧解析函数 */
static int ethmp_parseFrame(const char *pcFrameData)
{ int iRet = -1;
struct ether_header *pstEthHead = NULL;
struct ip *pstIpHead = NULL;
/* Ethnet帧头解析 */
pstEthHead = (struct ether_header*)g_acRecvBuf;
iRet = ethmp_parseEthHead(pstEthHead);
if (0 > iRet)
{ return iRet;}
/* IP数据包类型 */
pstIpHead = (struct ip *)(pstEthHead + 1);
iRet = ethmp_parseIpHead(pstIpHead);
return iRet;
}
/* 捕获网卡数据帧 */
static void ethmp_startCapture(const int fd)
{ int iRet = -1;
socklen_t stFromLen = 0;
/* 循环监听 */
while(1)
{ /* 清空接收缓冲区 */
memset(g_acRecvBuf, 0, RCV_BUF_SIZE);
/* 接收数据帧 */
iRet = recvfrom(fd, g_acRecvBuf, g_iRecvBufSize, 0, NULL, &stFromLen);
if (0 > iRet)
{ continue;}
/* 解析数据帧 */
ethmp_parseFrame(g_acRecvBuf);
}
}
/* Main */
int main(int argc, char *argv[])
{ int iRet = -1;
int fd = -1;
/* 初始化SOCKET */
fd = ethmp_initSocket();
if(0 > fd) {
return -1;
}
/* 捕获数据包 */
ethmp_startCapture(fd);
/* 关闭SOCKET */
close(fd);
return 0;
}
编译命令
gcc -o a a.c
./a
实现效果图
...
>>>Eth-Pkt-Type:0x0800(ip) SMAC=[00:1a:92:ef:b6:dd] DMAC=[00:24:7e:dc:99:18] IP-Pkt-Type:6(tcp) SAddr=[192.168.0.111] DAddr=[192.168.0.100]
>>> Eth-Pkt-Type:0x0800(ip) SMAC=[00:24:7e:dc:99:18] DMAC=[00:1a:92:ef:b6:dd] IP-Pkt-Type:6(tcp) SAddr=[192.168.0.100] DAddr=[192.168.0.111]
>>> Eth-Pkt-Type:0x0800(ip) SMAC=[00:24:7e:dc:99:18] DMAC=[00:1a:92:ef:b6:dd] IP-Pkt-Type:1(icmp) SAddr=[192.168.0.100] DAddr=[192.168.0.111]
>>> Eth-Pkt-Type:0x0800(ip) SMAC=[00:1a:92:ef:b6:dd] DMAC=[00:24:7e:dc:99:18] IP-Pkt-Type:1(icmp) SAddr=[192.168.0.111] DAddr=[192.168.0.100]
>>> Eth-Pkt-Type:0x0800(ip) SMAC=[00:1a:92:ef:b6:dd] DMAC=[00:24:7e:dc:99:18] IP-Pkt-Type:6(tcp) SAddr=[192.168.0.111] DAddr=[192.168.0.100]
...