Add to get the HTTPS IPv6 host.
This commit is contained in:
parent
1b7d8ad24b
commit
eda36ad2df
24
ais.c
24
ais.c
@ -173,16 +173,31 @@ int extract_host(const char *header)
|
|||||||
{
|
{
|
||||||
char *_p = strstr(header, "CONNECT"); /* 在 CONNECT 方法中解析 隧道主机名称及端口号 */
|
char *_p = strstr(header, "CONNECT"); /* 在 CONNECT 方法中解析 隧道主机名称及端口号 */
|
||||||
if (_p) {
|
if (_p) {
|
||||||
|
|
||||||
|
if (strchr(header, '[') || strchr(header, ']')) { // ipv6
|
||||||
|
char *_p1 = strchr(header, '[');
|
||||||
|
//printf("%s\n", _p1+1);
|
||||||
|
|
||||||
|
char *_p2 = strchr(_p1 + 1, ']');
|
||||||
|
//printf("%s\n", _p2);
|
||||||
|
|
||||||
|
strncpy(remote_host, _p1 + 1, (int)(_p2 - _p1) - 1);
|
||||||
|
remote_port = 443;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
char *_p1 = strchr(_p, ' ');
|
char *_p1 = strchr(_p, ' ');
|
||||||
char *_p2 = strchr(_p1 + 1, ':');
|
char *_p2 = strchr(_p1 + 1, ':');
|
||||||
char *_p3 = strchr(_p1 + 1, ' ');
|
char *_p3 = strchr(_p1 + 1, ' ');
|
||||||
|
|
||||||
if (_p2) {
|
if (_p2) {
|
||||||
char s_port[10];
|
char s_port[10];
|
||||||
bzero(s_port, 10);
|
bzero(s_port, 10);
|
||||||
|
|
||||||
strncpy(remote_host, _p1 + 1, (int)(_p2 - _p1) - 1);
|
strncpy(remote_host, _p1 + 1, (int)(_p2 - _p1) - 1);
|
||||||
strncpy(s_port, _p2 + 1, (int)(_p3 - _p2) - 1);
|
strncpy(s_port, _p2 + 1, (int)(_p3 - _p2) - 1);
|
||||||
remote_port = atoi(s_port);
|
remote_port = atoi(s_port);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
strncpy(remote_host, _p1 + 1, (int)(_p3 - _p1) - 1);
|
strncpy(remote_host, _p1 + 1, (int)(_p3 - _p1) - 1);
|
||||||
remote_port = 80;
|
remote_port = 80;
|
||||||
@ -193,17 +208,16 @@ int extract_host(const char *header)
|
|||||||
|
|
||||||
char *p = strstr(header, "Host:");
|
char *p = strstr(header, "Host:");
|
||||||
if (!p) {
|
if (!p) {
|
||||||
return BAD_HTTP_PROTOCOL;
|
return -1;
|
||||||
}
|
}
|
||||||
char *p1 = strchr(p, '\n');
|
char *p1 = strchr(p, '\n');
|
||||||
if (!p1) {
|
if (!p1) {
|
||||||
return BAD_HTTP_PROTOCOL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *p2 = strchr(p + 5, ':'); /* 5是指'Host:'的长度 */
|
char *p2 = strchr(p + 5, ':'); /* 5是指'Host:'的长度 */
|
||||||
|
|
||||||
if (p2 && p2 < p1) {
|
if (p2 && p2 < p1) {
|
||||||
|
|
||||||
int p_len = (int)(p1 - p2 - 1);
|
int p_len = (int)(p1 - p2 - 1);
|
||||||
char s_port[p_len];
|
char s_port[p_len];
|
||||||
strncpy(s_port, p2 + 1, p_len);
|
strncpy(s_port, p2 + 1, p_len);
|
||||||
@ -739,6 +753,8 @@ int _main(int argc, char *argv[])
|
|||||||
} else {
|
} else {
|
||||||
strncpy(remote_host, optarg, strlen(remote_host));
|
strncpy(remote_host, optarg, strlen(remote_host));
|
||||||
}
|
}
|
||||||
|
strcpy(remote_host, "2001:19f0:7001:3bcb:5400:3ff:fe03:860e");
|
||||||
|
remote_port = 127;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
DAEMON = 1;
|
DAEMON = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user