- 论坛徽章:
- 2
|
本帖最后由 cobras 于 2014-08-06 09:53 编辑
给个代码,可以直接抽出全部有效ipv4的地址。
- /* getip4.c */
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- int get_decimal_number(const char *s, int *io_off, int lmt, int *o_value)
- {
- int off;
- int value;
- off = *io_off;
- if (off < lmt && isdigit(s[off])) {
- value = 0;
- do {
- value = value * 10 + s[off] - '0';
- ++off;
- }while (off < lmt && isdigit(s[off]));
- *o_value = value;
- *io_off = off;
- return 0;
- }
- return -1;
- }
- int get_ip4_address(const char *s, int *io_off, int lmt, unsigned char o_addr[4])
- {
- int off;
- unsigned char addr[4];
- int value;
- int i;
- off = *io_off;
- if (get_decimal_number(s, &off, lmt, &value) == 0 && value >= 0 && value < 256) {
- i = 0;
- for (;;) {
- addr[i++] = value;
- if (i >= 4) {
- memcpy(o_addr, addr, sizeof(addr));
- *io_off = off;
- return 0;
- }
- if (s[off] != '.') {
- break;
- }
- ++off;
- if (get_decimal_number(s, &off, lmt, &value) != 0 || value < 0 || value >= 256) {
- break;
- }
- }
- }
- return -1;
- }
- int main(void)
- {
- unsigned char addr[4];
- const char *p = "traceroute to www.baidu.com (115.239.210.27)";
- int off;
- int lmt;
- off = 0;
- lmt = strlen(p);
- while (off < lmt) {
- if (get_ip4_address(p, &off, lmt, addr) == 0) {
- printf("%d.%d.%d.%d\n", addr[0], addr[1], addr[2], addr[3]);
- }else {
- ++off;
- }
- }
- return 0;
- }
复制代码 修正版
- /* getip4.c */
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- int get_decimal_number(const char *s, int off, int lmt, int *o_off, int *o_value)
- {
- int value;
- if (off < lmt && isdigit(s[off])) {
- value = 0;
- do {
- value = value * 10 + s[off] - '0';
- ++off;
- }while (off < lmt && isdigit(s[off]));
- *o_value = value;
- *o_off = off;
- return 0;
- }
- return -1;
- }
- int get_ip4_address(const char *s, int off, int lmt, int *o_off, unsigned char o_addr[4])
- {
- unsigned char addr[4];
- int value;
- int i;
- if (get_decimal_number(s, off, lmt, &off, &value) == 0 && value >= 0 && value < 256) {
- i = 0;
- for (;;) {
- addr[i++] = value;
- if (i >= 4) {
- memcpy(o_addr, addr, sizeof(addr));
- *o_off = off;
- return 0;
- }
- if (s[off] != '.') {
- break;
- }
- ++off;
- if (get_decimal_number(s, off, lmt, &off, &value) != 0 || value < 0 || value >= 256) {
- break;
- }
- }
- }
- *o_off = off;
- return -1;
- }
- int main(void)
- {
- unsigned char addr[4];
- const char *p = "traceroute to www.baidu.com (115.239.210.27 192.168.1.188,192.3.8.0)";
- int off, next;
- int lmt;
- off = 0;
- lmt = strlen(p);
- while (off < lmt) {
- if (get_ip4_address(p, off, lmt, &next, addr) == 0) {
- printf("%d.%d.%d.%d\n", addr[0], addr[1], addr[2], addr[3]);
- off = next;
- }else {
- if (next == off) {
- ++off;
- }else {
- off = next;
- }
- }
- }
- return 0;
- }
复制代码 |
|