네트워크에서 주어진 포트 번호 (8000)를 검색하려면 어떻게해야합니까?
일반 소켓 TCP 연결을 사용해 보았습니다. 살아있는 IP의 수가 15보다 많으면 시간이 많이 걸립니다. 목표는 주어진 포트가 열려있는 네트워크에서 IP 목록을 얻는 것입니다.
이 내가 내 네트워크네트워크에서 열린 포트를 가장 빨리 검색하는 방법
std::vector<std::string> resultIPList;
FILE* pipe = popen("arp-scan --localnet","r");
if(!pipe)
{
fprintf(stderr,"Unable to open pipe");
return resultIPList;
}
char buffer[128];
while(!feof(pipe))
{
if(fgets(buffer, 128, pipe) != NULL)
{
stringBuffer += buffer;
}
}
pclose(pipe);
이제 내 StringBuffer를이 IP 목록을 가지고에서 IP의 목록을 가져 오는 방법이다. i 문자열에서 ip를 추출하여 ip의 벡터를 제공하는 구문 분석기를 작성했습니다. 지금은 리눅스에 내가 같은 사용하여 부스트 : 당신은 잘못된 프로그램을 사용하고
struct sockaddr_in client;
int sock;
client.sin_family = AF_INET;
client.sin_port = htons(portNo);
client.sin_addr.s_addr = inet_addr(Ip.c_str());
sock = (int) socket(AF_INET, SOCK_STREAM, 0);
return (::connect(sock, (struct sockaddr *) &client,sizeof(client)) == 0);
속도 저하가 발생하는 위치를 보여주는 코드를 게시 할 수 있습니까? – GMasucci
'SOCK_STREAM'은 멀티 캐스트를 지원하지 않으므로 (알려진 바에 따르면) 알려진 IP 주소를 하나씩 시도하는 것을 제외하면 가장 빠른 방법으로 기대되는 것은 무엇입니까? 할 수있는 일은 거의 없지만 제대로 작동하는지 확인하고 연결해보십시오. – Damon
그런 종류의 일을 빠르게하는 일반적인 방법은 많은 수의 스레드를 생성하고 각각을 시도하고 연결하는 것입니다. 불행하게도 TCP 재시도 메커니즘을 사용하면 각 개별 시도의 속도를 높이는 좋은 방법이 없기 때문에 병렬로 무리를 실행합니다. –